根据业务需要在DataList中嵌套2个DataGrid,每个DataGrid都需要编辑删除功能,我在DataList的Init和Load方法中试过,Init根本就不执行,Load方法执行时还找不到DataGrid(我的DataGrid是直接写在DataList的模板列中的)。不知道能不能实现这个功能,很着急,望高手不吝赐教!!!

解决方案 »

  1.   

    <%@ Page language="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Inherits="DEMO1.WebForm8" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <TITLE>WebForm8</TITLE>
    <META name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <META name="CODE_LANGUAGE" content="C#">
    <META name="vs_defaultClientScript" content="JavaScript">
    <META name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <BODY ms_positioning="GridLayout">
    <FORM id="Form1" method="post" runat="server">
    <ASP:DATALIST id="DataList1" runat="server">
    <ITEMTEMPLATE>
    <ASP:DATAGRID id="test" runat="server">
    <COLUMNS>
    <ASP:TEMPLATECOLUMN>
    <ITEMTEMPLATE>
    <ASP:BUTTON id="tt" runat="server" onclick="DeleteCommand" text="删除" />
    </ITEMTEMPLATE>
    </ASP:TEMPLATECOLUMN>
    </COLUMNS>
    </ASP:DATAGRID>
    </ITEMTEMPLATE>
    </ASP:DATALIST>
    </FORM>
    </BODY>
    </HTML>
      

  2.   

    #region Web 窗体设计器生成的代码
    ...
    #endregionprivate void Page_Load(object sender, System.EventArgs e)
    {
    ArrayList al = new ArrayList();
    al.Add(1);
    al.Add(2);
    DataList1.DataSource = al;
    DataList1.DataBind();
    }private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    DataSet ds = new DataSet();
    SqlDataAdapter cmd = new SqlDataAdapter("select * from employees", new SqlConnection("server=.;database=northwind;uid=sa;pwd=;"));
    cmd.Fill(ds);
    DataGrid test = e.Item.FindControl("test") as DataGrid;
    test.DataSource = ds;
    test.DataBind();
    }protected void DeleteCommand(object sender, System.EventArgs e)
    {
    Button btn = sender as Button;
    DataGridItem item = btn.Parent.NamingContainer as DataGridItem;
    Response.Write("DataGrid项索引:" + item.ItemIndex); DataListItem item2 = item.Parent.Parent.NamingContainer as DataListItem;
    Response.Write("<br>父DataList项索引:" + item2.ItemIndex);
    }
      

  3.   

    非常感谢!还有一个问题请教:在编辑行的时候要获取数据集中的某行某列的值,有一个写法是:
    int id = int.Parse(dataGrid1.DataKeys[e.Item.ItemIndex].ToString());
    还有一种写法:
    int id = this.Ds1.employee[e.Item.ItemIndex].emp_id;
    但有时候第一种写法会报错,说dataGrid1.DataKeys的数组索引越界,百思不得其解,还请高手指点!
      

  4.   

    dataGrid1.DataKeys的数组索引越界多为未指定datakeyfield或者e.item.index值不对,
    输出或跟踪一下e.item.index的值与datagrid1.Items.count比较一下