2011-08-23 155 views
0

在我的表之一,我有以下三個字段:ID,標題,內容GridView控件綁定問題

如果我數據綁定表中數據爲GridView我想有一個鏈接,使用displaycontent格式的標題。 ASPX?ID = '身份證'。

我的問題是,如果我沒有在gridview中顯示id字段,我不綁定id字段。如何在datarowbind事件中獲得id值?

回答

1

我認爲你可以這樣做:

NavigationUrl='displaycontent.aspx?id=<%#Eval("Id")%>' 

而且你也不需要將Id列

我沒有測試,但我敢肯定,這就是理念結合。

0

有幾種方法可以做到這一點。您實際上不需要爲此訂閱RowDataBound事件。

你需要一個TemplateField列,其中包含足夠您的需求(HyperLinkLinkButton,或其他)

一個用戶控件讓我們假設你的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

2

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無關的任何其他代碼。