ASP.NET GridView_RowEditing获取单元格的值

时间:2013-05-24 20:17:22

标签: asp.net vb.net gridview

这是非常基本的东西,但我无法从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

我收到了这个错误:

Object reference not set to an instance of an object.

如何从GridView中的单元格中提取文本?

2 个答案:

答案 0 :(得分:1)

您很可能需要首先找到您想要的控件然后抓取文本,如下所示:

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

编辑:添加了示例代码

基本理念:

<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>

答案 1 :(得分:0)

在RowDataBound中执行类似的操作

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        int index = 0;
        if (e.Row.RowType == DataControlRowType.DataRow &&
    (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
        {
            // Here you will get the Control you need like:
            DropDownList dl = (DropDownList)e.Row.FindControl("ddlDriverID1");
            foreach (ListItem li in dl.Items)
            {
                if (li.Text == ((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[19].ToString())
                {
                    dl.SelectedIndex = index;
                    break;
                }
                index += 1;
            }

        }
    }