首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RowCommand上填充DDL

在RowCommand上填充DDL
EN

Stack Overflow用户
提问于 2018-05-11 14:07:00
回答 1查看 142关注 0票数 1

我有一个带有rowcommandlinkbutton的网格视图。但是,当我按下“链接”按钮时,行将被编辑,但是DDL应该将数据绑定到我的数据库中的值,但这是行不通的。

我不知道这是否是正确的方法,但当按链接按钮“对象引用未设置为对象的实例”时,确实会出现错误。但我不认为这是主要问题。

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

DDL列的ASPX标记:

代码语言:javascript
复制
<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>

CodeBehind:

代码语言:javascript
复制
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....
    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-11 14:31:59

使用这个

代码语言:javascript
复制
GridView gv = (GridView)sender;
DropDownList ddlStatusRow = (DropDownList)gv.Rows[rowIndex].FindControl("ddlStatusRow");

而不是

代码语言:javascript
复制
GridViewRow row = ((e.CommandSource as Control).NamingContainer as GridViewRow);
DropDownList ddlStatusRow = (DropDownList)row.Cells[3].FindControl("ddlStatusRow");

问题是编辑索引已经设置好了,所以row不再存在了,因为它已经被可编辑行取代了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50294203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档