【问题标题】:Fill DDL on RowCommand在 RowCommand 上填充 DDL
【发布时间】:2018-05-11 14:07:00
【问题描述】:

我有一个带有rowcommandlinkbutton 的gridview。当我按下链接按钮时,行被编辑但是 DDL 应该将数据与我的数据库表中的值绑定,但这不起作用

我不知道这是否是正确的做法,但我在按下链接按钮时确实出错了 “对象引用未设置为对象的实例。”但我不认为这是这里的主要问题。

我应该在从 Rowcommand 编辑时绑定我的 DDL 行还是任何人都可以看到我做错了什么?

DDL 列的 ASPX 标记:

<asp:TemplateField HeaderText="Status">
                 <EditItemTemplate>
                     <asp:DropDownList ID="ddlStatusRow" AppendDataBoundItems="True" runat="server" > 
                       <asp:ListItem>Status</asp:ListItem>  

                     </asp:DropDownList>
                     <asp:RequiredFieldValidator ID="rfEditStatus" runat="server" ErrorMessage ="Status is a required field"
                         ControlToValidate="ddlStatusRow" Text="*" ForColor="Red" InitialValue="Status">
                     </asp:RequiredFieldValidator>
                 </EditItemTemplate>
                 <ItemTemplate>
                     <asp:Label ID="Label1" runat="server" Text='<%# Bind("Status") %>'></asp:Label>
                 </ItemTemplate>
                 <HeaderStyle BackColor="#E6E6E6" Font-Bold="False" Font-Names="Arial" Font-Size="14px" ForeColor="Black" />
                 <ItemStyle Font-Size="12px" HorizontalAlign="Center" Width="4%" />
             </asp:TemplateField>

代码隐藏:

protected void gwUnplannedActivities_RowCommand(object sender, GridViewCommandEventArgs e)
{

    if (e.CommandName == "EditRow")
    {
        int rowIndex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex;
        gwUnplannedActivities.EditIndex = rowIndex;
        BindGridViewUnplannedActivities();

        GridViewRow row = ((e.CommandSource as Control).NamingContainer as GridViewRow);
        DropDownList ddlStatusRow = (DropDownList)row.Cells[3].FindControl("ddlStatusRow");  


        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;


        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("SELECT * FROM ....", con);
            con.Open();
            ddlStatusRow.DataSource = cmd.ExecuteReader();
            ddlStatusRow.DataTextField = "Status";
            ddlStatusRow.DataBind();
        }

    }
    else if (e.CommandName == "CancelUpdate")
    {
       //somecode....
    }
    else if (e.CommandName == "UpdateRow")
    {
        //somecode....
    }


}

【问题讨论】:

    标签: c# asp.net gridview dropdown rowcommand


    【解决方案1】:

    使用这个

    GridView gv = (GridView)sender;
    DropDownList ddlStatusRow = (DropDownList)gv.Rows[rowIndex].FindControl("ddlStatusRow");
    

    代替

    GridViewRow row = ((e.CommandSource as Control).NamingContainer as GridViewRow);
    DropDownList ddlStatusRow = (DropDownList)row.Cells[3].FindControl("ddlStatusRow");
    

    问题是已经设置了编辑索引,所以row 不再退出,因为它已被可编辑行替换。

    【讨论】:

    • VDWWD 再次为您节省了一天。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2016-10-05
    相关资源
    最近更新 更多