孟子的方法:http://dotnet.aspx.cc/ShowDetail.aspx?id=F43AF9A5-2C2E-4AA6-E976-21E9569F5A8A
<asp:TemplateColumn HeaderText="付款方式">
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.PaymentTerms") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList id="DropDownList3" runat="server"></asp:DropDownList>
</FooterTemplate>
</asp:TemplateColumn>    Private Sub datagrid1_ItemDataBound(ByVal sender As System.Object, ByVal e As DataGridItemEventArgs) Handles DataGrid1.ItemDataBoundEditItemTemplate里面有个DropDownList1,绑定数据是:       If e.Item.ItemType = ListItemType.EditItem Then
            '##############绑定DropDownList编辑时默认值是数据库字段中原先的值#######            Dim DRV1 As DataRowView = CType(e.Item.DataItem, DataRowView)
            Dim CurrentTerms As String = DRV1("PaymentTerms")            '#################################################            Dim DDL As DropDownList = CType(e.Item.Cells(9).Controls(1), DropDownList)
            Dim GetPaymentTerms As New modern
            Dim item1 As ListItem            DDL.DataSource = GetPaymentTerms.GetPaymentTerms().Tables("PaymentTerms").DefaultView
            DDL.DataValueField = "PaymentTerms"
            DDL.DataBind()
            item1 = DDL.Items.FindByValue(CurrentTerms)
            If Not item1 Is Nothing Then item1.Selected = True
            Dim DDL3 As DropDownList = CType(e.Item.Cells(9).Controls(2), DropDownList)
            DDL3.DataSource = GetPaymentTerms.GetPaymentTerms().Tables("PaymentTerms").DefaultView
            DDL3.DataValueField = "PaymentTerms"
            DDL3.DataBind()
       End If
    End Sub
DropDownList1的绑定数据没有问题(datasource是来自数据库一个数据表)
但是DropDownList3我用同样的方法绑定,但是却找不到控件(datasource是跟DropDownList1一样)
FooterTemplatee里面的DropDownList3后台要怎么找到他?最后我要实现的效果是快速添加新行:  http://tinypic.com/6f10uq.gif

解决方案 »

  1.   

    Dim DDL3 As DropDownList = CType(e.Item.Cells(9).Controls(2), DropDownList)
    改成
    Dim DGCount As Integer = DataGrid1.Controls(0).Controls.Count
    Dim DDL3 As DropDownList = Ctype(DataGrid1.Controls(0).Controls(DGCount-1).FindControl("DropDownList3"),DropDownList)
      

  2.   

    DATAGRID控件,在默认的操作里面,是找不到页眉/页脚的控件的.你必须如下方式寻找
    int mycount = this.DataGrid1.Controls[0].Controls.Count;
    DropDownList mybox = (DropDownList)this.DataGrid1.Controls[0].Controls[mycount-1].FindControl("DropDownList3");
    this.MyScript(mybox.SelectedValue);
      

  3.   

    改这样还是不行
                If e.Item.ItemType = ListItemType.Footer Then
                    Dim DGCount As Integer = DataGrid1.Controls(0).Controls.Count
                    Dim DDL3 As DropDownList = CType(DataGrid1.Controls(0).Controls(DGCount - 1).FindControl("DropDownList3"), DropDownList)
                    DDL3.DataSource = GetPaymentTerms.GetPaymentTerms().Tables("PaymentTerms").DefaultView
                    DDL3.DataValueField = "PaymentTerms"
                    DDL3.DataBind()
                End If
      

  4.   

    If e.Item.ItemType = ListItemType.Footer Then
                    Dim DGCount As Integer = DataGrid1.Controls(0).Controls.Count
                    Dim DDL3 As DropDownList = CType(DataGrid1.Controls(0).Controls(DGCount - 2).FindControl("DropDownList3"), DropDownList)
                    DDL3.DataSource = GetPaymentTerms.GetPaymentTerms().Tables("PaymentTerms").DefaultView
                    DDL3.DataValueField = "PaymentTerms"
                    DDL3.DataBind()
                End If
      

  5.   

    已竟帮你解决。要把此放在page_load里
      

  6.   

    总于可以了....在 hackate(兰花开香入梦境,独思佳人亦飘然!!) 的帮助下.原来要写在pageload事件...
    但是为什么孟子可以直接在Grid1_ItemCommand就找到footer里面的控件????????????这样简单????http://dotnet.aspx.cc/ShowDetail.aspx?id=C4CE487D-02FB-450B-BF3C-9F870CBC66A5