0

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' が宣言されていません。保護レベルによりアクセスできない場合があります

4

2 に答える 2

1

GridViewが編集モードで複数行をサポートしていないことは確かです。

回避策として、ItemTemplate両方の状態 (fe aLabelおよび a TextBox) に を使用できます。次に、引数としてプロパティEditModeを使用できます。RowIndexの編集モードで行を保存できますViewState

(未検証)

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

マークアップから直接呼び出すことができます。編集コントロールのfe:

Visible='<%# IsRowInEditMode(Container.DataItemIndex) %>
于 2012-12-27T22:22:03.137 に答える
0

あなたはバッターを機能させるこれを使用することができます...

   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
于 2013-04-05T08:01:34.627 に答える