как захватить значение поля шаблона gridview - PullRequest
1 голос
/ 02 марта 2012

В событии RowDataBound сетки Gridview ASP.NET я пытаюсь прочитать значение метки в поле шаблона. Я бы предпочел зафиксировать это значение в событии RowUpdating, но я почему-то напоминаю, что это невозможно. Вот ASP ...

<asp:TemplateField  HeaderText="Translation" ItemStyle-Width="250" >                      
    <ItemTemplate>
           <asp:Label ID="Label11" runat="server" Text='<%# Bind("lang_String") %>' Width="250px"></asp:Label>
    </ItemTemplate>

Вот код VB.net, который я пытаюсь выяснить ....

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

    If (e.Row.RowState And DataControlRowState.Edit) > 0 Then
        ' The value in the third column postion.
        Dim needThisValue as string = e.Row.Cells(3).Text

    End If
End Sub

Любая помощь будет принята с благодарностью.

спасибо,

1 Ответ

3 голосов
/ 02 марта 2012

Я не уверен, почему вы думаете, что ваша метка находится в EditItemTemplate, потому что вы выбрали RowState=DataControlRowState.Edit.

На самом деле вам нужно проверить RowType=DataControlRowType.DataRow. Это требуется, поскольку RowType в первой строке является заголовком.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewrow.rowtype.aspx

Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' in the following way you get the row's DataSource: '
        Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
        ' you could also use the DataSource to get the value: '
        Dim lang_String = row.Field(Of String)("lang_String")
        ' and here you get the reference to your Label in the ItemTemplate: '
        Dim Label11 = DirectCast(e.Row.FindControl("Label11"), Label)
        ' at this point Label11.Text is already set to lang_String '
    End If
End Sub

Если вы хотите получить элементы управления EditItemTemplate, вам нужно дополнительно проверить RowState , например, в GridView (обычно вы используете редактируемый элемент управления, например TextBox в EditItemTemplate):

 <ItemTemplate>
    <asp:Label ID="LblLanguage" runat="server" Text='<%# Bind("lang_String") %>' Width="250px"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
    <asp:TextBox ID="TxtLanguage" runat="server" Text='<%# Bind("lang_String") %>' Width="250px"></asp:TextBox>
</EditItemTemplate>

в RowDataBound:

Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' in the following way you get the row's DataSource: '
        Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
        ' you could also use the DataSource to get the value: '
        Dim lang_String = row.Field(Of String)("lang_String")

        If e.Row.RowState = DataControlRowState.Normal Then
            ' and here you get the reference to your Label in the ItemTemplate: '
            Dim LblLanguage = DirectCast(e.Row.FindControl("LblLanguage"), Label)
            ' at this point LblLanguage.Text is already set to lang_String '
        ElseIf e.Row.RowState = DataControlRowState.Edit Then
            ' and here you get the reference to your TextBox in the EditItemTemplate: '
            Dim TxtLanguage = DirectCast(e.Row.FindControl("TxtLanguage"), TextBox)
            ' at this point TxtLanguage.Text is already set to lang_String '
        End If
    End If
End Sub

Обратите внимание, что я изменил идентификатор элементов управления на несколько более читаемый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...