user1599309 user1599309 - 3 months ago 7
Vb.net Question

ASP.NET GridView_RowEditing get value of cell

This is pretty basic stuff, but I am unable to extract the text from a cell in my gridview.

<asp:TemplateField HeaderText="Rolle" SortExpression="role">
<ItemTemplate>
<asp:Label ID="roleLabel" runat="server" Text='<%# Eval("role") %>'></asp:Label>
</ItemTemplate>

<EditItemTemplate>
<asp:DropDownList style="width: 200px;" ID="roleDropdown" runat="server" DataSourceID="SqlDataSourceDropDownlist" DataTextField="role" DataValueField="roleID"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>


 

Protected Sub GridView1_rowediting(sender As Object, e As GridViewEditEventArgs) Handles GridView1.RowEditing

Dim tb As Label
tb = CType(GridView1.SelectedRow.Cells(1).FindControl("roleLabel"), Label)
Dim userRoleString As String = tb.Text

End Sub


I received this error:

Object reference not set to an instance of an object.


How do i extract the text from the cell in a GridView?

Answer

Most likely you need to find the control you want first then grab the text, something like this:

Dim tb as TextBox 
tb = CType(GridView1.SelectedRow.Cells(1).FindControl("ID_Of_Some_textbox"), TextBox)
Dim userRoleString As String = tb.Text

EDIT: Added Sample code

The basic Idea:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="user_id" 
    DataSourceID="SqlDataSource1">
    <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:TemplateField HeaderText="user_name" SortExpression="user_name">
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="user_name" 
                    DataValueField="user_name" SelectedValue='<%# Bind("user_name") %>' >
                </asp:DropDownList>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("user_name") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>