代码如下:
<asp:DataList ID="DataList1" runat="server" Width="600px" OnItemCommand="DataList1_ItemCommand" OnItemDataBound="DataList1_ItemDataBound">
       <ItemTemplate>
          <asp:Label ID="lblName" runat="server" Visible="false" Text='<%# Eval("M_Name") %>'></asp:Label>
          <asp:TextBox ID="txtReply" Width="150px" Height="40px" runat="server"></asp:TextBox> <br />
      <asp:Button ID="Button1" CssClass="btn_2k3" runat="server" Text="确定" OnClick="Button1_Click" />
       </ItemTemplate>
   </asp:DataList>
需求:点击按钮,得到文本框里的值,然后根据label里的名字保存到数据库。
但是我貌似逻辑出现错误,双击了Button激活了它的点击事件,结果在Button1_Click()事件里始终找不到Label和TextBox;
现在我想在DataList 的 ItemCommand 事件或者是 ItemDataBound事件里实现此功能,要怎么做,是不是跟GridView 的RowDataBound 和RowCommand 很像?请各位大虾解惑~

解决方案 »

  1.   

    和gridview差不多。也就是通过datalist的EditCommand 事件来控制修改。
      

  2.   

    用FindControl来查找就可以了 嗯 跟gridview的差不多
      

  3.   

     e.Item.FindControl("")去找控件得到值
      

  4.   

    就在你的Button1的click事件下即可:
        protected void Button1_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            int index = ((DataListItem)(btn.NamingContainer)).ItemIndex;//获得行号
            string lab = ((Label)DataList1.Items[index].FindControl("lblName")).Text;//获得Label值
            string txt = ((TextBox)DataList1.Items[index].FindControl("txtReply")).Text;//获得TextBox值
            //保存到数据库
             //................
        }
      

  5.   


    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Tim演示 </title> 
    </head>
    <body >
        <form id="form1" runat="server">
        <div>
            <asp:DataList ID="DataList1" runat="server" Width="600px"  >
          
                <ItemTemplate  >
                    <asp:Label ID="lblName" runat="server" Text='<%#Eval("ID")%>'  ></asp:Label>
                    <asp:TextBox ID="txtReply" Width="150px" Height="40px" runat="server"></asp:TextBox>
                    <br />
                    <asp:Button ID="Button1"   runat="server" Text="确定" OnClick="Button1_Click" />
                </ItemTemplate>
            </asp:DataList>
        </div>
        </form>
    </body>
    </html>
     protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("ID");
                    for (int i = 0; i < 10; i++)
                    {
                        dt.Rows.Add(i);
                    }
                    DataList1.DataSource = dt;
                    DataList1.DataBind();
                }
              
            }
            protected void Button1_Click(object sender, EventArgs e)
            {
                DataListItem dl = (sender as Button).Parent as DataListItem;
                Label l = dl.FindControl("lblName") as Label;
                TextBox tb = dl.FindControl("txtReply") as TextBox;
                int m = Convert.ToInt32(l.Text) + Convert.ToInt32(tb.Text);
                ScriptManager.RegisterStartupScript(this, this.GetType(), "", "alert(" + m + ")", true);
            } 
      

  6.   

    在itemcommand中可以判断是否单击了按钮,你得为按钮设定一个commandName属性,值也可放在commandArgument属性中,然后在itemcommand事件通过e.commandName判断是否单击了该铵钮
      

  7.   

    至于获取label的值,用findControl就可以找了
      

  8.   

    这个方法已经成功了~~~itemcommand这个方法有时间在去弄~~谢谢大家~