1

これはかなり基本的なことですが、グリッドビューのセルからテキストを抽出できません。

<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 のセルからテキストを抽出するにはどうすればよいですか?

4

2 に答える 2

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>
于 2013-05-24T20:29:39.713 に答える
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;
            }

        }
    }
于 2013-12-29T23:24:30.053 に答える