更改gridview templatefield itemtemplate中的控件值

时间:2010-08-20 03:04:46

标签: asp.net gridview

嗨,我有这样的网格视图。

<asp:DropDownList ID="triggerDropDown" runat="server" AutoPostBack="true" onselectedindexchanged="triggerDropDown_SelectedIndexChanged">

<asp:GridView ID="myGridView" run="server">
     <Columns>
          <asp:TemplateField HeaderText="Column 1">
               <ItemTemplate>
                   <asp:DropDownList ID="myDropDown1" runat="server" />
               </ItemTemplate>
          </asp:TemplateField>

          <asp:TemplateField HeaderText="Column 2">
               <ItemTemplate>
                   <asp:DropDownList ID="myDropDown2" runat="server" />
               </ItemTemplate>
          </asp:TemplateField>
     </Columns>
</asp:GridView>

现在,当我更改triggerDropDown时,我想更改Column 1内的所有DropDowns,我该怎么做?

protected void triggerDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
    // what should I do here?
}

3 个答案:

答案 0 :(得分:2)

在您的活动方法中,您应该访问位于DropDownList每行中的GridView。这样做可以将每个DropDownList绑定到您想要的任何数据。

此链接显示了如何执行此操作:

http://www.velocityreviews.com/forums/t191319-need-help-with-accessing-a-control-within-a-template-field.html

基本上:

  • 迭代GridView的每一行;

  • 使用以下内容查找DropDownList控件:

    DropDownList mddl = GridView.Rows[2].FindControl("myDropDown1");

  • 将新数据绑定到mddl。

答案 1 :(得分:0)

gridview很可能不是你想要的。更改行中包含的控件的值的方法通常是使用gridview的ItemDataBound事件中的e.Item.FindControl()来获取所需控件的句柄。

您的方法的问题在于您希望gridview(triggerDropDown)之外的控件与gridview的单行交互。您是否希望网格中每个项的第一个,第一列,最后,第一列或第一列?您可以更好地获取触发器下拉列表的目标并将其置于gridview之外并直接处理它。

如果你真的打算在网格中连续更改项目,请考虑在gridview的ItemDataBound事件中这样做,你会发现很多例子。

答案 2 :(得分:0)

实际上我可以使用GridViewRow :)我只需要找到GridViewControl并获取Rows属性GridViewRow,现在我可以对每一行进行操作。

foreach (GridViewRow gridViewRow in (this.FindControl("myGridView") as GridView).Rows)
{
    // I can see all elements of my row here as if I am traversing on GridViewEvents
}