读书人

gridview中动态生成的模板列HyperLink

发布时间: 2011-12-27 22:22:55 作者: rapoo

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

读书人网 >asp.net

热点推荐