比如一个7行的DataList控件DataList1,其中的模板列包含一个Label控件Label1和一个Button控件Button1,我要点击第2行的Button1获取同行的这个Label1的text属性值,代码怎么写?我还要把这个值传给同一页面下的另一个按钮事件,建议一下用什么方法传值比较好

解决方案 »

  1.   

    FindControl()
    OR getElementById()
      

  2.   

    fang fa 1. keyi zai javascript jiaoben li xie
    javascipt
    function fun(str)
    {
    window.open("111.aspx?id=" + str,_blank);
    }
    <datalist ..>
    <itemtimple>
    <asp:lable ....><%# datacontainer.eval(dataitem,"..")%></asp:lable>
    <asp:button onclick="fun(<%#datacontainer.eval(dataitem,"..")%>)"></asp:button>
    <itemtemple>
    </datalist>jiu keyi le 
    asp:button hao xiang mei you onclick   hui bao cuo
    ni jiu zai cs li xie 
    this.button1.attrbute.add("onclick","fun(<%#datacontainer.eval(dataitem,"..")%>)");
    huo zhe ni jie yong html de button
      

  3.   

    fang fa 2
    zai hou tai xie
    gen datagride yi yang
      

  4.   

    虽然看明白了,但是我真的想哭啊李月亮同学~~~以后我当你的翻译!!!=。=!!
    I know your name is Lee_Moon,hihi能否借用datalist的什么索引之类的来弄这个吗?
      

  5.   

    进入编辑模板,在button1的属性里的CommandName里写上你要的命令名:如addtocart然后在
    private void DataList1_ItemCommand(object source,  System.Web.UI.WebControls.DataListCommandEventArgs e)
    {    
         if(e.CommandName=="addtocart")
         {
              string value=((Label)e.Item.FindControl("Label1")).Text;
         }
    }
    要传给下面的按钮可以用Session保存,或者定义一个页面级的变量
      

  6.   

    buyi2004(buyi) 你的方法我倒真没用过,但是我试了一下,不知道怎么样这个事件会激发,我始终不能使value获得值,是点了button1激发?也就是说CommandName属性 和ItemCommand 事件时干吗的?呵呵,能否讲讲
      

  7.   

    你选中DataList1,在它的属性里有一个象闪电一样的标志,点进去就会看到datalist的时间,其中就有ItemCommand,点击后就会生成DataList_ItemCommand事件,然后把
    if(e.CommandName=="addtocart")
         {
              string value=((Label)e.Item.FindControl("Label1")).Text;
         }
    添进去就可以了
    ItemCommand允许在DataList中自定义事件,并且通过CommandName来控制
      

  8.   

    用DataList_EditCommand,可以按照string value=((Label)e.Item.Cells[?].Control[?]).Text;或用FindControl()。定义一个模版列:里面就放你的按钮,按钮的CommandName="Edit"  然后用ViewState 来存储你点击按钮后要存储的值。
      

  9.   

    仔细看了一遍msdn,明白了,现在的问题是((Label)e.Item.FindControl("Label1")).Text;
    这句没有获得Lable1的text属性值,真的!!-_-"
      

  10.   

    这很奇怪,我可以设置((Label)e.Item.FindControl("Label1")).Text = "123456"
    类似这样,但是却不能把Lable1原有的值保存到一个变量里,咋回事么
      

  11.   

    是真的,我现在也是这样的情况!怎么样都是取得原来绑定的值,如果原来是没有值那就是空的!我现在也是为这样郁闷呀!http://community.csdn.net/Expert/topic/5164/5164643.xml?temp=.3451959 来看看呀,回贴帮解决呀!谢谢!
      

  12.   

    protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "transform_str")
            {
                ((Label)e.Item.FindControl("Label1")).Text = "123456";
             //如果放在DataList1_ItemCreated事件里还能把Lable1的text给改了,放这里根本不起作用,但不论放到哪个事件里,类似: string value=((Label)e.Item.FindControl("Label1")).Text;这种付值的都不管用        }    }
    下面是aspx页面datalist里模板项里的
    <asp:Button ID="delete" runat="server" Text="删除留言" Font-Size="Smaller" Visible="False" OnClick="delete_Click" CommandName="transform_str"/><asp:Label ID="Label1" runat="server"><%# DataBinder.Eval(Container.DataItem, "messid")%></asp:Label>
      

  13.   

    对了,绑定的时候要这样写
    <asp:Label ID="Label1" text='<%# DataBinder.Eval(Container.DataItem,....)%>' runat="server"></asp:Label>
    这样就可以了
      

  14.   

    哇呜~~~~还是不行大哥,页面显示有值,是我的数据库主键id,有40,41,42,43,44,45
    但是
    string value=((Label)e.Item.FindControl("Label1")).Text;
    他打死就是显示空值,他就是不能把40或者41或者…………付给value,我要去跳楼!
      

  15.   

    不要用value,换个别的,比如newsID
      

  16.   

    你把那张页面发给我看看行不?邮箱:[email protected]
      

  17.   

    但是我这个Lable1.Text 在页面加载的时候明明是有值的
      

  18.   

    string value=((Label)e.Item.FindControl("Label1")).Text;
    写在哪个方法里了?
    设断点看方法有没有被调用;
      

  19.   

    protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "transform_str")
            {
                string a3212421 = ((Label)e.Item.FindControl("Label1")).Text;
                Response.Write(a3212421);
            }    }
    这样写的,该方法不被调用,于是写到protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
    里了,该方法绝对被调用,设断点察看a3212421 ="" ,我都Response.Write了,不行,但是如果
    ((Label)e.Item.FindControl("Label1")).Text = "12345678";倒是可以把Lable1.Text给改掉
      

  20.   

    写在ItemDataBound里
    dim Linkaa as LinKButton
    Linkaa = e.item.e.Item.FindControl("LinkButton1")dim strText as string
    strText = Linkaa.text值取到了
      

  21.   

    for  alasunny(阿拉)值还是没有取到哈
      

  22.   

    alasunny(阿拉)  的方法是对的,要写到ItemDataBound事件里~~~这是什么道理??没天理,没人性阿~~~~~~~~~~~
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                string a3212421 = "1111";
                a3212421 = ((Label)e.Item.FindControl("Label1")).Text;
                Response.Write(a3212421);
            }
        }这样,我终于取到了朝思暮想的正确得值,结贴,感谢各位的关注!!!
      

  23.   

    不用在ItemDataBound时也可以获到 你取到的是原来的值 说明数据重绑了 控件索引 ????
      

  24.   

    主要是要弄清楚事件发生的条件啊,
    我原来也发生过类似的问题,写在itemcommand里面,自认为这个是默认事件,想当然的可以发生冒泡。
    结果和你的问题是一样的。当DataList/datagrid or rp 中,你添加LinkButton ,点了之后,是发生提交事件,也就是说页面重新刷新了,所有代码又初始了。所以只有写在itemdatabound里面,当数据绑定的时候,就进行取值。
      

  25.   

    来晚了,补充一下:
       1、如果还在本页面显示数据,注意  postback 与 !postback (如更新数据) 
       2、e.commandname  的取值最好避开关键字,如:add delete update 等。否则会出错,不信就试试吧。
       3、传递值:session cookie  params(querystring form)等,什么好还得看情况
      

  26.   

    no my name is not liyueliang
    leemoon is my name ,it has the same pronounce with my chinese name.
    my family name is wang.