<%@ Page Language="C#"  %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">
    DataSet ds;    void Page_Load(Object sender, EventArgs e)
    {       if (!IsPostBack)
       {             SqlConnection cnn = new SqlConnection("server=(local);database=pubs; uid=sa; pwd=;");
              SqlDataAdapter da = new SqlDataAdapter("select * from authors",cnn);              ds = new DataSet();
              da.Fill(ds,"authors");              DataGrid1.DataSource = ds.Tables["authors"].DefaultView;
              DataGrid1.DataBind();
       }    }    void DropDownList1_SelectedIndexChanged(Object sender, EventArgs e)
    {
          DropDownList ddl = (DropDownList)sender;
          Response.Write(ddl.SelectedItem.Text);
    }    void Item_Bound(Object sender, DataGridItemEventArgs e)
      {
         if((e.Item.ItemType == ListItemType.Item) ||
             (e.Item.ItemType == ListItemType.AlternatingItem))
         {
            DropDownList ddl = (DropDownList)e.Item.FindControl("DropDownList1");
            ddl.DataSource = ds.Tables["authors"].DefaultView;
            ddl.DataTextField = "au_lname";
            ddl.DataValueField = "au_id";
            ddl.DataBind();
            ddl.Items.FindByValue(DataBinder.Eval(e.Item.DataItem,"au_id").ToString()).Selected = true;
         }      }</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:DataGrid id="DataGrid1" runat="server" OnItemDataBound="Item_Bound">
            <Columns>
              <asp:TemplateColumn HeaderText="DropDownList">
               <ItemTemplate>
              <asp:DropDownList id="DropDownList1"
          OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
          AutoPostBack="True"
          runat="server" D/>
               </ItemTemplate>
               </asp:TemplateColumn>
            </Columns>
        </asp:DataGrid>
    </form>
</body>
</html>

解决方案 »

  1.   

    在DataGrid的ItemCreated事件中添加:
     if((e.Item.ItemType == ListItemType.Item) ||
                 (e.Item.ItemType == ListItemType.AlternatingItem))
    {
    DropDownList dlst=(DropDownList)e.Item.FindControl("drop");
    dlst.SelectedIndexChanged+=new EventHandler(this.dlst_SelectedIndexChanged);
    }然后自己定义这个事件吧
    private void dlst_SelctedIndexChanged(object sender,System.Envent.Args e)
    {
    DataGridItem item=(DataGridItem)((DropDownList)sender).Parent.Parent;
    ......
    }