C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 【GridView】標準機能 編集モードについて


(過去ログ 76 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■44812 / inTopicNo.1)  【GridView】標準機能 編集モードについて
  
□投稿者/ T_A~K_A (25回)-(2009/12/18(Fri) 11:57:31)

分類:[ASP.NET (VB)] 

皆さんこんばんは。
T_A~K_Aと申します。

現在、GridViewの編集モードについて調査しております。
GridViewには標準で行に対して「編集/削除/キャンセル」という機能があります。
そこで質問があります。

1.複数行同時に編集する事は可能なのでしょうか?
2.編集モードに入った場合、テキストボックスになりますが
  他にもドロップダウンやチェックボックスなどに変更する事は可能なのでしょうか?
3.GridViewが左側、右側存在した場合、左側を編集モードにした場合
  連動して右側も編集モードにする事(イベントをキャッチ)は可能なのでしょうか?

ご存知の方いらっしゃいましたらご教授願います。
引用返信 編集キー/
■44813 / inTopicNo.2)  Re[1]: 【GridView】標準機能 編集モードについて
□投稿者/ gtk2k (142回)-(2009/12/18(Fri) 13:01:22)
> 1.複数行同時に編集する事は可能なのでしょうか?
基本的には不可能と思われる。

> 2.編集モードに入った場合、テキストボックスになりますが
>   他にもドロップダウンやチェックボックスなどに変更する事は可能なのでしょうか?
CheckBoxFieldを使用したり、列をテンプレート化し、ドロップダウンコントロールを配置することで可能と思われる。

> 3.GridViewが左側、右側存在した場合、左側を編集モードにした場合
>   連動して右側も編集モードにする事(イベントをキャッチ)は可能なのでしょうか?
RowEditingまたはRowCommandなどのイベント時に右側のEditIndexを設定すればできると思われる。

引用返信 編集キー/
■44814 / inTopicNo.3)  Re[2]: 【GridView】標準機能 編集モードについて
□投稿者/ T_A~K_A (26回)-(2009/12/18(Fri) 13:07:15)
gtk2kさん返信ありがとう御座います。

>>1.複数行同時に編集する事は可能なのでしょうか?
> 基本的には不可能と思われる。
私が調べた限りでは、複数行は無理だと思っています。
やはり不可能ですよね。

>>2.編集モードに入った場合、テキストボックスになりますが
>>  他にもドロップダウンやチェックボックスなどに変更する事は可能なのでしょうか?
> CheckBoxFieldを使用したり、列をテンプレート化し、ドロップダウンコントロールを配置することで可能と思われる。
恐らく、EditItemに配置する事で可能なのかな?くらいです。
これは可能という事ですよね。

>>3.GridViewが左側、右側存在した場合、左側を編集モードにした場合
>>  連動して右側も編集モードにする事(イベントをキャッチ)は可能なのでしょうか?
> RowEditingまたはRowCommandなどのイベント時に右側のEditIndexを設定すればできると思われる。
そうですか!!
なるほど・・・試してみます。

ちなみに標準だとGridViewの左側にボタンが配置されると思うのですが、
これをチェックボックにする事はできないですかね?

引用返信 編集キー/
■44815 / inTopicNo.4)  Re[1]: 【GridView】標準機能 編集モードについて
□投稿者/ みきぬ (687回)-(2009/12/18(Fri) 13:17:07)
No44812 (T_A~K_A さん) に返信
> 1.複数行同時に編集する事は可能なのでしょうか?

可能にするために、どこまで頑張れるかにもよるけど…。

チュートリアル : GridView Web サーバー コントロールにバインドされた行の一括更新を実行する
http://msdn.microsoft.com/ja-jp/library/aa992036.aspx
引用返信 編集キー/
■44816 / inTopicNo.5)  Re[2]: 【GridView】標準機能 編集モードについて
□投稿者/ T_A~K_A (28回)-(2009/12/18(Fri) 13:56:41)
みきぬさん返信ありがとう御座います。
>>1.複数行同時に編集する事は可能なのでしょうか?
>
> 可能にするために、どこまで頑張れるかにもよるけど…。
自分でガリガリメイクしないと駄目なんですかね。

> チュートリアル : GridView Web サーバー コントロールにバインドされた行の一括更新を実行する
> http://msdn.microsoft.com/ja-jp/library/aa992036.aspx
この手順だと、GridViewの標準機能を使用していない事になりますよね?

引用返信 編集キー/
■44818 / inTopicNo.6)  Re[3]: 【GridView】標準機能 編集モードについて
□投稿者/ gtk2k (143回)-(2009/12/18(Fri) 14:51:05)
2009/12/18(Fri) 14:51:37 編集(投稿者)
>これをチェックボックにする事はできないですかね? 
だからCheckBoxFieldを使用すればいいと。
それか、テンプレート化してチェックボックスを配置すればいい。
テンプレート化してチェックボックスを配置したほうがいろいろと手を入れることができるから
やるならこっちがいいと思う。

RowEditingまたはRowCommandなどのイベント時〜と書いたが、訂正する。
これらのイベントでもやろうと思えばできるが、
チェックボックスにチェックを入れた時に行うのならチェックボックスのCheckedChanged
イベントのほうがいいと思われる。
その際には、aspxでテンプレートに貼り付けたCheckBoxにrowindexなど適当な属性を書き足し
DataItemIndexを設定することでどの(行の)チェックボックスがクリックされたのか判定する
ことができる。
(そもそも、基本的に単一行しか編集できないのでチェックボックスではなくラジオボタンを使用すべきだが)
<!-- aspx 左のグリッドビューのテンプレート内のチェックボックス -->
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Bool列") %>' AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" rowIndex="<%# Container.DataItemIndex %>" />

'イベント内
Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
  Dim cb As CheckBox = CType(sender, CheckBox)
  Dim idx As Integer = CInt(cb.Attributes("rowIndex"))
  Me.RightGridView.DataSource = tblRight
  Me.RightGridView.EditIndex = idx '左のグリッドビューでクリックされた行と同じ行を編集行にする
  Me.RightGridView.DataBind()
End Sub

引用返信 編集キー/
■44821 / inTopicNo.7)  Re[4]: 【GridView】標準機能 編集モードについて
□投稿者/ T_A~K_A (29回)-(2009/12/18(Fri) 15:17:39)
gtk2kさん返信ありがとう御座います。

> >これをチェックボックにする事はできないですかね?
> だからCheckBoxFieldを使用すればいいと。
> それか、テンプレート化してチェックボックスを配置すればいい。
> テンプレート化してチェックボックスを配置したほうがいろいろと手を入れることができるから
> やるならこっちがいいと思う。
GridViewの標準機能を使って実現したかっただけです。
無理ならば、テンプレートフィールドにチェックボックスを配置してやるしかないって事は
分かっています。

> RowEditingまたはRowCommandなどのイベント時〜と書いたが、訂正する。
> これらのイベントでもやろうと思えばできるが、
> チェックボックスにチェックを入れた時に行うのならチェックボックスのCheckedChanged
> イベントのほうがいいと思われる。
どちらでも実現可能であれば、いいなと思います。

> その際には、aspxでテンプレートに貼り付けたCheckBoxにrowindexなど適当な属性を書き足し
> DataItemIndexを設定することでどの(行の)チェックボックスがクリックされたのか判定する
> ことができる。
> (そもそも、基本的に単一行しか編集できないのでチェックボックスではなくラジオボタンを使用すべきだが)
> <!-- aspx 左のグリッドビューのテンプレート内のチェックボックス -->
> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Bool列") %>' AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" rowIndex="<%# Container.DataItemIndex %>" />
>
> 'イベント内
> Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
> Dim cb As CheckBox = CType(sender, CheckBox)
> Dim idx As Integer = CInt(cb.Attributes("rowIndex"))
> Me.RightGridView.DataSource = tblRight
> Me.RightGridView.EditIndex = idx '左のグリッドビューでクリックされた行と同じ行を編集行にする
> Me.RightGridView.DataBind()
> End Sub
何となくですが分かりました。

実現したい事は以下のような事です。
1.1件チェック=>修正ボタン押下(対象行が修正モード)
2.n件チェック=>修正ボタン押下(対象行が修正モード)
3.ヘッダ固定/列固定(1つのグリッドで実現するとレコード件数が多いとレスポンスが低下する問題がある)
  ⇒ 4つのグリッドを使ってヘッダ固定/列固定を実現する(レスポンスの低下が改善される、確認済み)

上記の通り4つのグリッドを使うのでどうやって編集モードを左右同期させればいいか悩んでいるわけです。

引用返信 編集キー/
■44822 / inTopicNo.8)  Re[5]: 【GridView】標準機能 編集モードについて
□投稿者/ T_A~K_A (30回)-(2009/12/18(Fri) 15:40:42)
こんばんは。T_A~K_Aです。

gtk2kさんへ

CheckBoxにてPostBackするようにして、gtk2kさんのサンプルソースを基にやってみました。
1行編集時に左右編集モードになりました。成功です!!ありがとう御座います。

但し、複数件は無理ですよね。
チェックされている行全てを編集モードにしたのですが。
Me.RightGridView.EditIndexプロパティは1行のみですよね。

引用返信 編集キー/
■44829 / inTopicNo.9)  Re[6]: 【GridView】標準機能 編集モードについて
□投稿者/ gtk2k (144回)-(2009/12/18(Fri) 16:45:12)
2009/12/18(Fri) 16:48:56 編集(投稿者)
No44822 (T_A~K_A さん) に返信
> こんばんは。T_A~K_Aです。
> 
> gtk2kさんへ
> 
> CheckBoxにてPostBackするようにして、gtk2kさんのサンプルソースを基にやってみました。
> 1行編集時に左右編集モードになりました。成功です!!ありがとう御座います。
> 
> 但し、複数件は無理ですよね。
> チェックされている行全てを編集モードにしたのですが。
> Me.RightGridView.EditIndexプロパティは1行のみですよね。
> 

EditIndexは1行のみなのでこのプロパティは使用しない。

右のグリッドビューで編集する列をすべてテンプレート化し、
表示コントロールと編集コントロールの2つを貼り付ける。
(例として、表示コントロールをLabel、編集コントロールをTextBoxとすると)
<ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("B") %>' Visible="true"></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("B") %>' Visible="false"></asp:TextBox>
</ItemTemplate>

左のチェックボックスでCheckedChangedイベントを拾うようにし(AutoPostBackをTrueにしないとだめ)、
イベント時に右のグリッドビューにデータを再度バインドさせる
Protected Sub CheckBox_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Me.RightGridView.DataSource = ViewState("tblB")
    Me.RightGridView.DataBind()
End Sub

右のグリッドビューのRowDataBoundにおいて、
左のチェックボックス(ID="CheckBox1"とする)がチェックされてない場合は表示コントロールを表示し、
チェックされている場合はされている行であれば編集コントロールを表示させる
Protected Sub RightGridView_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles RightGridView.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim chk As Boolean = CType(Me.LeftGridView.Rows(e.Row.RowIndex).FindControl("CheckBox1"), CheckBox).Checked
        CType(e.Row.FindControl("Label1"), Label).Visible = Not chk
        CType(e.Row.FindControl("TextBox1"), TextBox).Visible = chk
    End If
End Sub

とこんな感じで、チェックボックスのON/OFFにより右を複数行編集可能に表示することが可能。

引用返信 編集キー/
■44831 / inTopicNo.10)  Re[7]: 【GridView】標準機能 編集モードについて
□投稿者/ T_A~K_A (31回)-(2009/12/18(Fri) 17:27:47)
gtk2kさん返信ありがとう御座います。

> 右のグリッドビューで編集する列をすべてテンプレート化し、
> 表示コントロールと編集コントロールの2つを貼り付ける。
> (例として、表示コントロールをLabel、編集コントロールをTextBoxとすると)
> <ItemTemplate>
> <asp:Label ID="Label1" runat="server" Text='<%# Bind("B") %>' Visible="true"></asp:Label>
> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("B") %>' Visible="false"></asp:TextBox>
> </ItemTemplate>
ItemTemplateに2つ定義して、表示・非表示をコントロールするという事ですね!!
理解できました。情報提供ありがとう御座いますm(_ _)m
さっそくやってみます!!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -