我想在DataGrid里点行的任何地方(不使用模板列和超链),就能取出这行的值~想了好久也解决不了,希望大家帮帮我呀~谢谢

解决方案 »

  1.   

    private void dg_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
      if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==  ListItemType.AlternatingItem) 
       { 
         e.Item.Attributes.Add("onclick", "return SelectStr(\'" + e.Item.Cells[0].Text+ "\');"););      
       }
    }
      

  2.   

    比如说我想把我点的这行的值放到一个TEXTBOX里,那e.Item.Attributes.Add("onclick", "return SelectStr(\'" + e.Item.Cells[0].Text+ "\');"););是不是就该改成e.Item.Attributes.Add("onclick", "TextBox1.Text=SelectStr(\'" + e.Item.Cells[0].Text+ "\');"););呀
      

  3.   

    e.Item.Attributes.Add("onclick", "document.all.textbox1.value="+e.Item.Cells[0].Text);
    这仅仅表示第一列的值放到textbox1里面,你说的取出这行的数据可能需要多次赋值吧
      

  4.   

    应该为:
    e.Item.Attributes.Add("onclick", "document.all("TextBox1").value=SelectStr(\'" + e.Item.Cells[0].Text+ "\');"););
      

  5.   

    单击行内任意处选中该行  DataGrid中提供的选择行的默认的方式是添加一个Select按钮(实际上,是一个LinkButton按钮),将其CommandName属性设为“Select”,当单击按钮时,DataGrid得到“Select”命令,并自动地在选中模式下显示该行。  并非所有的用户都会喜欢默认的“Select”按钮,问题是如何实现在某行的任意处单击而能选中该行。The solution is to perform a kind of sleight-of-hand in the grid.你可以象通常那样添加一个Select LinkButton,用户仍然可以使用它,也可以将它隐藏,然后在Page中加入客户端脚本将Select按钮的功能有效地复制到整个行。下面的例子说明了如何来实现。在GataGrid的ItemDataBound句柄中,首先要保证选中的行不能是header ,footer 或者Pager。然后得到Select按钮的一个引用。在这个例子中,假设是第一个单元格中的第一个控件。然后调用一个少有人知的方法——GetPostBackClientHyperLink,这个方法返回一个设计好的控件的PostBack调用的名称。换句话说,如果传递一个引用到一个LinkButton控件,这个方法将返回用于执行PostBack的客户端功能调用的名称。最后,将客户端方法指定给Item 本身,当DataGrid 生成时,它类似于一个HTML的Table。将方法指定给Item,等价于向表中的每一个行添加客户端代码。DataGrid的Item对象并不直接支持客户端代码到自身的方法,但是,我们可以通过它的Attributes集合来实现,这个集合传递通过浏览器指定给它的任何属性项。注意:这个技术的一个缺点在于,它在某种程度上增加了生成到浏览器的流,并且为每行的视图状态增加了信息量。private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){   ListItemType itemType = e.Item.ItemType;   if ((itemType == ListItemType.Pager) ||        (itemType == ListItemType.Header) ||        (itemType == ListItemType.Footer))    {      return;   }   LinkButton button = (LinkButton)e.Item.Cells[0].Controls[0];   e.Item.Attributes["onclick"] =       Page.GetPostBackClientHyperlink(button, "");}
      

  6.   

    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if((e.Item.ItemType == ListItemType.Item)||(e.Item.ItemType == ListItemType.AlternatingItem))
    {
    e.Item.Attributes.Add("onclick","document.getElementById('TextBox1').value = '" + e.Item.Cells[0].Text + "'");
    }
    }
      

  7.   

    问题解决了,swordragon(古道热肠)在我的例子上可以实现,谢谢大家,这么帮助我,最后一个问题..............怎么给分,我不知道点哪里才能给你们分
      

  8.   

    DataGrid有这样一个事件  CurrentCellChanged是专门用来处理你说的问题 的  你看看下面的里子
    private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
    {
    this.textBox1.Text=this.dataGrid1[this.dataGrid1.CurrentCell.RowNumber,0].ToString().Trim();
    this.textBox2.Text=this.dataGrid1[this.dataGrid1.CurrentCell.RowNumber,1].ToString().Trim();
    }
      

  9.   

    如果我把TEXTBOX放在一个PANEL里,开始我把PANEL隐藏,当点一行我叫他显示,并把值提取到TEXTBOX里面,但是却不行,我感觉E.TIEM里的ONCLICK事件里在每次点击的时候只能触发一个事件,不能2个事件同时触发,是吗
      

  10.   

    e.Item.Attributes.Add("onclick","document.getElementById('Panel1').style.visibility = "visible";document.getElementById('TextBox1').value = '" + e.Item.Cells[0].Text + "'");
      

  11.   

    刚才的拼错了,"应该改为',不好意思!!!e.Item.Attributes.Add("onclick","document.getElementById('Panel1').style.visibility = 'visible';document.getElementById('TextBox1').value = '" + e.Item.Cells[0].Text + "'");或者:(多加了一个判断,如果是隐藏的就显示)e.Item.Attributes.Add("onclick","var obj = document.getElementById('Panel1');if (obj.style.visibility == 'hidden'){obj.style.visibility = 'visible'};document.getElementById('TextBox1').value = '" + e.Item.Cells[0].Text + "'");