在我的一张桌子中,我有三个以下字段:id,title,content
如果我将表数据数据绑定到GridView
我希望使用displaycontent.aspx?id ='id'格式的标题链接。
我的问题是如果我没有在gridview中显示id字段,我没有将id字段绑定到它。如何在datarowbind事件中获取id值?
答案 0 :(得分:2)
Juse创建一个模板字段,并将绑定的所有自定义本地化到控件的OnDataBinding
事件。出于某些原因,大多数人都会在我不推荐的RowDataBound
事件中这样做。没有理由必须使用控件DataBinding搜索控件,它还允许自定义本地化并易于更换而不必影响其他任何操作。想象一下,如果您的网格中有20个需要DataBinding
某种自定义的控件。你的RowDataBound
事件将是一团糟,并且必须知道网格中可能容易出错的所有内容。
示例:
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink runat="server" ID="lnkYourLink"
OnDataBinding="lnkYourLink_DataBinding" />
</ItemTemplate>
</asp:TemplateField>
在codebind中:
protected void lnkYourLink_DataBinding(object sender, System.EventArgs e)
{
HyperLink lnk = (HyperLink)(sender);
lnk.Text = Eval("Title").ToString();
lnk.NavigateUrl = string.Format("displaycontent.aspx?id={0}",
Eval("ID").ToString())
}
我更喜欢这种方法来内联代码,因为它不会使你的标记与任何逻辑混乱。如果第二天您需要它为LinkButton
,则可以轻松地将其换出,而不会触及与HyperLink
无关的任何其他代码。
答案 1 :(得分:1)
我认为你可以这样做:
NavigationUrl='displaycontent.aspx?id=<%#Eval("Id")%>'
并且您不需要绑定Id列
我没有测试,但我确信这是个主意。
答案 2 :(得分:0)
有几种方法可以做到这一点。实际上,您无需为此订阅RowDataBound
事件。
您需要一个TemplateField
列,其中包含满足您需求的UserControl(HyperLink
,LinkButton
或其他任何内容)
我们假设您的TemplateColumn如下所示:
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink runat="server" ID="hlContent" Text="Details" />
</ItemTemplate>
</asp:TemplateField>
你可以在标记中使用数据绑定,正如Icarus建议的那样。 意味着您的HyperLink看起来像这样(未经测试):
<asp:HyperLink runat="server" ID="hlContent" Text="Details" />
另一种选择是使用RowDataBound
事件,正如您在问题中提出的那样:
protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow) // neccessary to differentiate between content, header and footer
{
HyperLink hlContent = e.Row.FindControl("hlContent") as HyperLink;
YourObject dataItem = e.Row.DataItem as YourObject; // Depending on what datatype your e.Row.DataItem is. Take a look at it which the QuickWatch
hlContent.NavigateUrl = String.Format("displaycontent.aspx?id={0}", dataitem.id);
}
}
编辑:在发布有关如何使用RowDataBound事件的几个答案之后,我决定写一篇详细阐述它的文章:http://www.tomot.de/en-us/article/7/asp.net/gridview-overview-of-different-ways-to-bind-data-to-columns