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により右を複数行編集可能に表示することが可能。