add a handler for OnSelectedIndexChanged, for example
<%@ Page language="C#" UiCulture="zh-CN" Culture="zh-CN"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html><head>
<script runat="server">
      void Page_Load(Object sender, EventArgs e) 
      {   
         if(!IsPostBack)                    
         {
SqlDataAdapter da = new SqlDataAdapter("select * from authors",
"Server=localhost;Database=pubs;UID=sa;PWD=;");
DataSet ds = new DataSet();
da.Fill(ds, "authors"); MyDataGrid.DataSource = ds.Tables["authors"].DefaultView;
MyDataGrid.DataBind();

 }    
      }      void DDLChange(Object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
Response.Write(String.Format("{0}:{1}<BR>", ddl.ID,ddl.SelectedItem.Value));
} public void MyDataGrid_ItemDataBound(Object sender, DataGridItemEventArgs e)
{
    ListItemType itemType = e.Item.ItemType;
    if (itemType == ListItemType.Header) 
    {
       DropDownList ddl = (DropDownList)e.Item.FindControl("DDLTop");
ddl.DataSource = MyDataGrid.DataSource;
ddl.DataTextField = "au_lname";
ddl.DataValueField = "au_id";
ddl.DataBind();
       }
    }
</script>
<form runat="server">
      <asp:DataGrid id="MyDataGrid" runat="server"  AutoGenerateColumns="false" OnItemDataBound="MyDataGrid_ItemDataBound">
         <Columns>
            <asp:BoundColumn HeaderText="Last Name" 
                 ReadOnly="true" 
                 DataField="au_lname"/>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:DropDownList id="DDLTop" runat="server" AutoPostBack="True" Width="100%" OnSelectedIndexChanged="DDLChange">
</asp:DropDownList>
</HeaderTemplate> <ItemTemplate>
<asp:CheckBox id="chkMyDataGrid" runat="server" Text="Test"/>
</ItemTemplate>
</asp:TemplateColumn>
         </Columns>
      </asp:DataGrid>
<asp:Button id="btn" runat="Server" text="submit" />
</form>

解决方案 »

  1.   

    private void yourdatagrid_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Header)
    {
    DropDownList DDLTop=( (DropDownList)e.Item.FindControl("DDLTop") );
    }
    DDLTop.SelectedIndexChanged += new System.EventHandler(yourDropDownList_SelectedIndexChanged);
    }private void yourDropDownList_SelectedIndexChanged(object sender, System.EventArgs e)
    {}
      

  2.   

    在.aspx中:
    <asp:DropDownList Runat="server" ID="DDLTop" OnSelectedIndexChanged="ItemChang" AutoPostBack="True"></asp:DropDownList>在.aspx.cx中:
    public void ItemChang(Object sender, EventArgs e) //一定是要public或protected
    {DropDownList ddl = (DropDownList)DataGrid1.Items[i].Cells[1].Controls[1];
    //i即DataGrid1中的列号}
      

  3.   

    在程序文件中VB语言的是.vb的文件中加Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
            '加上你的程序在此事件内就行了
    End Sub