在我的表之一,我有以下三個字段:ID,標題,內容GridView控件綁定問題
如果我數據綁定表中數據爲GridView
我想有一個鏈接,使用displaycontent格式的標題。 ASPX?ID = '身份證'。
我的問題是,如果我沒有在gridview中顯示id字段,我不綁定id字段。如何在datarowbind事件中獲得id值?
在我的表之一,我有以下三個字段:ID,標題,內容GridView控件綁定問題
如果我數據綁定表中數據爲GridView
我想有一個鏈接,使用displaycontent格式的標題。 ASPX?ID = '身份證'。
我的問題是,如果我沒有在gridview中顯示id字段,我不綁定id字段。如何在datarowbind事件中獲得id值?
我認爲你可以這樣做:
NavigationUrl='displaycontent.aspx?id=<%#Eval("Id")%>'
而且你也不需要將Id列
我沒有測試,但我敢肯定,這就是理念結合。
有幾種方法可以做到這一點。您實際上不需要爲此訂閱RowDataBound
事件。
你需要一個TemplateField
列,其中包含足夠您的需求(HyperLink
,LinkButton
,或其他)
一個用戶控件讓我們假設你的TemplateColumn中看起來是這樣的:
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink runat="server" ID="hlContent" Text="Details" />
</ItemTemplate>
</asp:TemplateField>
您可以讓數據綁定就像伊卡洛斯所說的那樣。 意味着,超鏈接看起來像這樣(未經):
<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
Juse使模板字段和locali所有綁定到控件的事件的定製。出於某種原因,大多數人在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
無關的任何其他代碼。