ASP.NET 4.0 GridView では、複数の行を同時に編集モードにすることはできますか?
プロパティで編集モードで行を制御しています:
Private Property Editing As List(Of Integer)
Get
If ViewState("Editing") Is Nothing Then ViewState("Editing") = New List(Of Integer)
Return CType(ViewState("Editing"), List(Of Integer))
End Get
Set(value As List(Of Integer))
ViewState("Editing") = value
End Set
End Property
ユーザーが編集ボタンをクリックしたときにデータを入力します。
Protected Sub GridView1_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
If e.CommandName = "Edit" Then
Dim row = CType(CType(e.CommandSource, LinkButton).NamingContainer, GridViewRow)
Editing.Add(row.RowIndex)
End If
End Sub
また、RowDataBound イベントで RowState プロパティを手動で変更します。
Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
If Editing.Contains(e.Row.RowIndex) Then
Then e.Row.RowState = DataControlRowState.Edit
End If
End If
End Sub
しかし、それは機能していません。行は通常の状態でレンダリングされています...アイデアはありますか?
編集2:プロパティ
MultipleEditGridView.vb:
Namespace ClubeCheckIn.UI
Public Class MultipleEditGridView
Inherits GridView
Protected Property IsRowInEditMode(rowIndex As Int32) As Boolean
Get
If ViewState("GridRowEditIndices") Is Nothing Then
Return False
Else
Dim indices = DirectCast(ViewState("GridRowEditIndices"), List(Of Int32))
Return indices.Contains(rowIndex)
End If
End Get
Set(value As Boolean)
If ViewState("GridRowEditIndices") Is Nothing Then
ViewState("GridRowEditIndices") = New List(Of Int32)
End If
Dim indices = DirectCast(ViewState("GridRowEditIndices"), List(Of Int32))
indices.Remove(rowIndex)
indices.Add(rowIndex)
End Set
End Property
End Class
End Namespace
web.config:
<controls>
<add tagPrefix="clube" namespace="ClubeCheckIn.UI" />
</controls>
ASPX:
<clube:MultipleEditGridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="txtEdit" runat="server" Visible="<%# IsRowInEditMode(Container.DataItemIndex) %>" />
</ItemTemplate>
</Columns>
</clube:MultipleEditGridView>
エラー:
エラー: BC30451: 'IsRowInEditMode' が宣言されていません。保護レベルによりアクセスできない場合があります