0

我有一个超过 30 列的 GridView。大多数是普通控件,但对于一些我添加了模板控件(DropDownList、Calendar 和 CheckBox 控件)。这是相关控件的 aspx 代码

     <asp:TemplateField HeaderText="Field1 Caption" SortExpression="Field1">
         <ItemTemplate>
            <asp:Label ID="lblConstructionArea" runat="server" Text='<%# Eval("Field1") %>'></asp:Label>
         </ItemTemplate>
         <EditItemTemplate>
              <asp:DropDownList ID="ddlField1" EnableViewState="true" runat="server"></asp:DropDownList>
          </EditItemTemplate>
      </asp:TemplateField>

当用户单击编辑时,我希望在列上显示一个下拉列表。所以我添加了这段代码(和上面的EditItemTemplate)

  protected void gvData_RowEditing(object sender, GridViewEditEventArgs e)
    {
        string fieldOne = CommonUtils.ExtractControlValue(e,"lblField1",gvData);

        gvData.SelectedIndex = e.NewEditIndex;
        gvData.EditIndex = e.NewEditIndex;
        gvData.DataBind();

        BindGridDropDownData(e, CommonUtils.GetConstructionAreas() ,"ddlConstructionArea", constructionArea, "Field1", fieldOne);
    }

在上面的代码中,我获取了当前可用并将其传递给另一个方法,以便在显示下拉列表时可以准确显示所选索引。在此之后,我对下拉列表进行更改并单击 GridView 上的“更新按钮”并触发以下事件

   protected void gvData_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int rowEditIndex = e.RowIndex;
        GridViewRow gRow = gvData.Rows[rowEditIndex];


        DropDownList ddlConstructionArea = (DropDownList) gvData.Rows[rowEditIndex].FindControl("ddlConstructionArea"); //This does not work

        ddlConstructionArea = (DropDownList)gRow.FindControl("ddlConstructionArea");//This does not work 

        ddlConstructionArea = (DropDownList)gvData.Rows[rowEditIndex].Cells[7].FindControl("ddlConstructionArea");//this does not work either
        gvData.EditIndex = -1;//this works and the text boxes disappear
        gvData.DataBind();//this works and the old data shows up on the gridview
    }

我很好奇如何在我拥有绑定是运行时的网格上进行更新。

4

2 回答 2

1

实际上,在标记中,您将下拉列表的 ID 指定为 ddlField1,而在代码隐藏中,您将其引用为 ddlConstructionArea。这是导致更新不起作用的原因吗?

于 2012-11-13T10:06:54.733 回答
0

问题在于网格的绑定方式。我已经编写了代码来在页面加载时刷新网格,并且每当我单击“编辑”按钮时,页面都会被刷新,并且会触发网格绑定而不是更新事件。我删除了在页面加载时刷新网格的代码,并将其放在需要它的地方,并且事件的顺序以我想要的方式触发,并且更新完美地工作而没有问题。

于 2012-11-14T13:55:55.557 回答