<asp:DataGrid id="dgd" runat="server"
     <asp:TemplateColumn HeaderText="111">
             <ItemTemplate>
                <asp:Label ID="mylabel" runat="server" text=""></asp:Label>
             </ItemTemplate>
         </asp:TemplateColumn>
</asp:DataGrid>我需要在.aspx.cs里对mylabel.text进行操作,可是我在外面得不到mylabel这个id,请问应该怎么办?

解决方案 »

  1.   

    dgd.Items[指定Label控件所在DataGrid的行数].FindControl("mylabel");
      

  2.   

    dgd.Items[指定Label控件所在DataGrid的行数].FindControl("mylabel").text怎么不对呢?
      

  3.   

    <asp:Label ID="mylabel" runat="server" text="<%# 数据绑定了没有%>"></asp:Label>
      

  4.   

    ((System.Web.UI.Label) dgd.Items[指定Label控件所在DataGrid的行数].FindControl("mylabel")).Text
      

  5.   

    ((System.Web.UI.WebControls.Label) dgd.Items[指定Label控件所在DataGrid的行数].FindControl("mylabel")).Text
      

  6.   

    异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
    ps:回kuibobo(^踏雪无痕) 
     
       <asp:Label ID="mylabel" runat="server" text="<%# 数据绑定了没有%>"></asp:Label>
    ------------------------------------这里绑定了我还怎么改啊?  
     
      

  7.   

    那你应该再加个绑定列,有label的列就仅仅在itemdatabound里面对他进行赋值
      

  8.   

    请问我对label的操作在哪个事件里完成?databinding 还是 page_load?
      

  9.   

    请问我对label的操作在哪个事件里完成?databinding 还是 page_load?
      

  10.   

    label lab=(label)this.dgd.item[i].findcontrol("mylabel")就可以了
      

  11.   

    把相关代码和错误提示贴出来,另外上面说过是在itemdatabound里面赋值
      

  12.   

    label lb = new label();
    lb = (label)dgd.item[指定Label控件所在DataGrid的行数].findcontrol("mylabel");
    lb.text
     这样就可以取得它的text值了.
      

  13.   

    aspx代码:
    <asp:DataGrid id="dgd_paper" runat="server" OnItemDataBound="xxxx">
                   <asp:TemplateColumn HeaderText="xxxx">
                        <ItemTemplate>
                            <asp:Label ID="mylabel" runat="server"></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateColumn>
    </asp:DataGrid>.cs代码:protected void Page_Load(object sender, System.EventArgs e)
        {string connectionString = ConfigurationManager.AppSettings["mydatabasesetting"];        SqlConnection myConnection = new SqlConnection(connectionString);        SqlCommand myCommand = new SqlCommand(mysql, myConnection);        SqlDataAdapter myAdapter = new SqlDataAdapter();
            myAdapter.SelectCommand = myCommand;        DataSet myDataSet = new DataSet();
            myAdapter.Fill(myDataSet);        dgd_paper.DataSource = myDataSet;
            dgd_paper.DataBind();
            myConnection.Close();
    }    protected void xxxx(object sender, DataGridItemEventArgs e)
        {
            ((System.Web.UI.WebControls.Label)dgd_paper.item[0].FindControl("mylabel")).Text = "asdf";//错误提示在这一行
        }错误:
    异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
    参数名: index
      

  14.   

    写成这样也是同样的错误:((System.Web.UI.WebControls.Label)dgd_paper.FindControl("mylabel")).Text = "asdf";
      

  15.   

    最好能改写成itme[i].cells[j].findcontrol..i代表行数,j代表列数,写清楚写明白最好
      

  16.   

    那如何取得EmptyDatatemplate里的textbox的输入值呢?
      

  17.   

    ((TextBox) dgd.itme[i].cells[j].FindControl("TextBox1")).Text
      

  18.   

    可不可以取到GridView中的EmptyDataTemplate里放入的输入的内容呀?
      

  19.   

    ((TextBox) dgd.Items[i].Cells[0].FindControl("mylabel")).Text 其中i代表行数,表示你要修改的那行的textbox控件,一般放在循环中!