Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound        If e.Item.ItemIndex = -1 Then
        Else
            Dim a As Label
            a = e.Item.FindControl("l1")
            Dim k As DataList
            k = e.Item.FindControl("datalist1")
            Dim cn As New OleDbConnection(Application("heli"))
            Dim cm As New OleDbDataAdapter("select * from main where sort='" & a.Text & "' order by id desc", cn)
            Dim ds As New DataSet()
            cm.Fill(ds, "n1e")
            k.DataSource = ds.Tables("n1e").DefaultView
            k.DataBind()
            'Response.Write(a.Text)
        End If    
    End Sub

解决方案 »

  1.   

    this.mydatagrid.Item[i].FindControl("ControlName")
    orthis.mydatagrid.Item[i].Cell[i].Control[i]
      

  2.   

    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="test.aspx.vb" Inherits="heli_new.test"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>test</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout" bgColor="lavender">
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 4px; POSITION: absolute; TOP: 14px" runat="server" AutoGenerateColumns="False" Width="100%">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <P>
    <asp:Label id=l1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.sort") %>'>
    </asp:Label></P>
    <P>
    <asp:DataList id="DataList1" runat="server" ShowHeader="False" RepeatColumns="5" Width="100%">
    <ItemTemplate>
    <asp:Label id="Labelt" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.sn") %>'>
    </asp:Label>
    </ItemTemplate>
    </asp:DataList><BR>
    </P>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=TextBox1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.name") %>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid></FONT>
    </form>
    </body>
    </HTML>
      

  3.   

    谢谢!我用了一下,但好象不行,
    首先我用的是:
    DropDownList myDropDownList=new DropDownList();
    myDropDownList=e.Item.FindControl("ddlPubLevel");
    编译时报错如下:
    无法将类型“System.Web.UI.Control”隐式转换为“System.Web.UI.WebControls.DropDownList”
    然后我是这样用的:
    Control myDropDownList=e.Item.FindControl("ddlPubLevel");
    this.TextBox1.Text =myDropDownList.ID.ToString();运行时报错如下:
    未将对象引用设置到对象的实例。
    this.TextBox1.Text =myDropDownList.ID.ToString();(这句)
    请问是怎么回事?谢谢!
      

  4.   

    再次求救!当我把DropDownList放在datagrid控件外面时用Control myDropDownList=FindControl("ddlPubLevel");能找到它,当把它放在datagrid内作为子控件时无论怎样都找不到!请各位大侠救我!谢谢!
      

  5.   

    我好像遇到过你的问题,保那个错误的原因是,你的e.Item并不是当前的编辑项,你将那个下啦列表放在edititemtemplate里的话那种方法就找不到的,比如你在sub datagrid_edit 中写就找不到了,但放在itemtemplate中就没问题
      

  6.   

    我是放在itemtemplate中的,html代码如下:
    <%@ Page language="c#" Codebehind="WebDataGrid.aspx.cs" AutoEventWireup="false" Inherits="news.WebDataGrid" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebDataGrid</title>
    <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="WebDataGrid" method="post" runat="server">
    <FONT face="宋体">
    <asp:datagrid id="dgNews" style="Z-INDEX: 101; LEFT: 23px; POSITION: absolute; TOP: 10px" runat="server" GridLines="None" Font-Names="宋体" Font-Size="9pt" AllowCustomPaging="True" AllowPaging="True" Width="645px" Height="253px" CellPadding="1" CellSpacing="1">
    <HeaderStyle Font-Size="9pt" Font-Names="宋体" HorizontalAlign="Center" BackColor="#AAAADD"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="嵌入控件">
    <ItemTemplate>
    <asp:DropDownList id="ddlPubLevel" runat="server" Width="78px" Height="30px"></asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
    <asp:TextBox id="TextBox1" style="Z-INDEX: 102; LEFT: 236px; POSITION: absolute; TOP: 338px" runat="server" Width="107px" Height="29px"></asp:TextBox></FONT></form>
    </body>
    </HTML>
      

  7.   

    后台代码
    Sub dgNews_EditCommand(...)
      dim drp as DropDownList = e.item.findconrol("ddlPubLevel")
      '下面就可以控制drp了,用过很多次,应该没问题的
    End Sub
    sorry,代码是vb的,道理应该一样呀
      

  8.   

    我是在ItemDataBound事件中写,是否有错?代码如下:
    private void dgNews_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    Control myDropDownList=e.Item.FindControl("ddlPubLevel");
    if(myDropDownList!=null)
    {
    this.TextBox1.Text =myDropDownList.ID.ToString();
    }
    else
    {
    this.TextBox1.Text ="null";
    }运行后始终为null。