在DataList中选择ItemTemplate模版然后在里放入一个button按钮我想点击button按钮后执行EditItemTempate模版的内容?也就是怎么从ItemTemplate转到EditItemTempate?

解决方案 »

  1.   

    在DataList的ItemCommand事件中设置DataList1.EditItemIndex = e.Item.ItemIndex;再重新查询数据库,绑定一下DataList。
      

  2.   

    参考示例:
    <asp:DataList ID="DataList1" runat="server" onitemcommand="DataList1_ItemCommand">
    <ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%#Eval("姓名") %>'></asp:Label>
    <asp:Button ID="Button1" runat="server" Text="编辑" CommandName="Edit" />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("姓名") %>'></asp:TextBox>
    <asp:Button ID="Button2" runat="server" Text="确定"></asp:Button>
    </EditItemTemplate>
    </asp:DataList>
    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    BindDataList1();
    } private void BindDataList1()
    {
    SqlCeData md = new SqlCeData();
    DataTable dt = md.FillDataTable("select * from 学生信息");
    md.Close();
    DataList1.DataSource = dt;
    DataList1.DataBind();
    } protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
    if (e.CommandName == "Edit")
    {
    DataList1.EditItemIndex = e.Item.ItemIndex;
    BindDataList1();
    }
    }
    其中SqlCeData为数据库操作类,你换成原生的ADO.NET代码即可。
      

  3.   

    这个是一个完整的示例,从编辑到更新回数据库:
    <asp:DataList ID="DataList1" runat="server" DataKeyField="学号" OnItemCommand="DataList1_ItemCommand">
    <ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%#Eval("姓名") %>'></asp:Label>
    <asp:Button ID="Button1" runat="server" Text="编辑" CommandName="Edit" />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("姓名") %>'></asp:TextBox>
    <asp:Button ID="Button2" runat="server" Text="确定" CommandName="Update"></asp:Button>
    </EditItemTemplate>
    </asp:DataList>
    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    BindDataList1();
    } private void BindDataList1()
    {
    SqlCeData md = new SqlCeData();
    DataTable dt = md.FillDataTable("select * from 学生信息");
    md.Close();
    DataList1.DataSource = dt;
    DataList1.DataBind();
    } protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
    switch (e.CommandName)
    {
    case "Edit":
    DataList1.EditItemIndex = e.Item.ItemIndex;
    BindDataList1();
    break;
    case "Update":
    TextBox tb = e.Item.FindControl("TextBox1") as TextBox;
    SqlCeData md = new SqlCeData();
    md.ExecuteNonQuery("update 学生信息 set 姓名=@姓名 where 学号=@学号", "@姓名", tb.Text.Trim(), "@学号", DataList1.DataKeys[e.Item.ItemIndex].ToString());
    md.Close();
    DataList1.EditItemIndex = -1;
    BindDataList1();
    break;
    }
    }
    假定数据表内只有“学号”和“姓名”两个字段,“学号”为主键。你要改写的是数据库操作类这块代码,改成ado.net就行了。