日期:2014-05-18  浏览次数:20441 次

gridview中动态生成的模板列HyperLinkField,但通row.Cells[1].Text 获取的值为"" 空字符串。
详细情况是这样的:
GridView1动态添加模板列BoundField,如下
 for (int i = 0; i < dt.Columns.Count; i++)
  {
  BoundField bc = new BoundField();
  bc.DataField = dt.Columns[i].ColumnName.ToString();
  bc.HeaderText = dt.Columns[i].Caption.ToString();

  GridView1.Columns.Add(bc);
  }

这样通过以下方式获取到gridview1每行的值:
 foreach (GridViewRow row in GridView1.Rows)
  {
  CheckBox cBox=(CheckBox)row.FindControl("CheckBox1");
  if (cBox.Checked)
  {
  selectedItems.Add(Convert.ToString(row.Cells[1].Text));//
  }

但是将GridView1动态添加模板列BoundField换成HyperLinkField后,即:

 for (int i = 0; i < dt.Columns.Count; i++)
  {
  HyperLinkField hlf = new HyperLinkField();
  hlf.HeaderText = dt.Columns[i].Caption.ToString();
  hlf.DataTextField = dt.Columns[i].ColumnName.ToString();
  hlf.SortExpression = dt.Columns[i].Caption.ToString();
  GridView1.Columns.Add(hlf);
  }

通过遍历gridview1获取值时:
foreach (GridViewRow row in GridView1.Rows)
  {
  CheckBox cBox=(CheckBox)row.FindControl("CheckBox1");
  if (cBox.Checked)//此处可以获取的checkbox的值
  {
  selectedItems.Add(Convert.ToString(row.Cells[1].Text));//但此处的row.Cells[1].Text
  //的值为""
  }

请各位大侠帮忙找出问题原因,并提供解决办法!~






------解决方案--------------------
把完整的代码贴上来吧,这样说的不是很清楚
BoundField 是绑定列,不是模板列
------解决方案--------------------
//*****你可以将需要取的值存储一个隐藏控件中,如下

<input id="hidValue" type="hidden" value='<%#DataBinder.Eval(Container.DataItem,"F_ID")%>' runat="server">


//****然后获取hidValue控件的值即可
------解决方案--------------------
得到文本:
Response.Write((GridView1.Rows[1].Cells[1].Controls[0] as HyperLink).Text);
得到链接内容:
Response.Write((GridView1.Rows[1].Cells[1].Controls[0] as HyperLink).NavigateUrl);

就楼主的问题,改为
(row.Cells[1].Controls[0] as HyperLink).Text