2011-08-23 1 views
0

は、私は3次のフィールドがあります。 aspx?id = 'id'。GridViewのデータバインディングの質問私のテーブルの一

私はidフィールドをそれにバインドしないgridviewに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を作成しますコントロールのOnDataBindingイベントへのバインドのすべてのカスタマイズを行います。何らかの理由でほとんどの人が私がお勧めしないRowDataBoundイベントでこれを行います。コントロールDataBindingを使用してコントロールを検索する必要はなく、他に影響を与えることなくカスタマイズをローカライズして簡単にスワップアウトすることもできます。グリッドに20種類のコントロールがあり、何種類かのカスタマイズがDataBinding必要だったとします。あなたのRowDataBoundイベントは混乱し、簡単にバグができるグリッド内のすべてについて知る必要があります。

例:codebindで

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:HyperLink runat="server" ID="lnkYourLink" 
      OnDataBinding="lnkYourLink_DataBinding" /> 
    </ItemTemplate> 
</asp:TemplateField> 

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とは無関係のコードに触れることなく簡単に交換することができます。

関連する問題