我有一个从数据库填充的网格视图。
我需要这样做,以便特定列中的每个单元格在单击时链接到第二页并将单元格的文本值作为查询字符串传递(即链接到http://mysite.com/page.aspx?CellText='blah blah胡说')。听起来很简单我知道,但我无法理解它!
这就是我的页面目前的样子:
<asp:GridView id="gdvTargets"
runat="server"
AutoGenerateEditButton="true"
OnRowEditing="gdvTargets_RowEdit"
OnRowUpdating="gdvTargets_RowUpdating"
OnRowUpdated="gdvTargets_RowUpdated"
OnRowCancelingEdit="gdvTargets_RowCancelingEdit"
cssClass="grid"
>
<HeaderStyle CssClass="GridHeader"></HeaderStyle>
我的c#代码背后:
protected void Page_Load(object sender, EventArgs e)
{
year = Request.QueryString["YearSelector"];
targetType = Request.QueryString["TargetType"];
gdvTargets.DataSource = this.Ets.Api.Util.Db.GetDataTable("EXEC sp_getTargets " + year + ", " + targetType).Return;
gdvTargets.DataBind();
}
这会产生一个如下所示的表:
ID System Target 1 Target 2 Target3 Target 4
0 ALL 10 20 15 10
2 Machine1 4 7 7 7
5 Xfgb 45 6 13 8 3
我希望系统列可以点击并链接到新页面,但是用它来获取系统的名称。希望这是有道理的!谢谢你的帮助:D
答案 0 :(得分:3)
您可以做的是:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Text = "<a href=''>" + e.Row.Cells[0].Text + "</a>";
}
用列索引替换0
答案 1 :(得分:1)
使用OnRowCommand
事件。在您的标记中,设置TemplateField
LinkButton
,并将链接按钮的CommandName
和CommandArguments
设置为必要信息。即,您可以命名CommandName
“链接”(或任何您想要的)和CommandArgument
表格行的ID,或页面的URL等等。
当触发行命令事件时,检查它是什么命令并在其中执行您希望的操作。
public void gridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if(e.CommandName == "Link")
{
int key = int.Parse(e.CommandArgument.ToString());
Response.Redirect(string.Format(
"http://mySite/index.aspx?id={0}", key));
}
}
答案 2 :(得分:0)
将HyperLinkField
添加到Gridview
并设置以下属性:
<asp:HyperLinkField DataNavigateUrlFields="System"
DataNavigateUrlFormatString="page.aspx?CellText={0}"
DataTextField="System" />
DataTextField
:要在列中显示的文字
DataNavigateUrlFormatString
:Url沿着带有0索引的查询字符串进行导航
DataNavigateUrlFields
:要在查询字符串中传递的字段。如果你想传递超过1个字段,请用逗号分隔。