は、私は3次のフィールドがあります。 aspx?id = 'id'。GridViewのデータバインディングの質問私のテーブルの一
私はidフィールドをそれにバインドしないgridviewにidフィールドを表示しないと私の質問です。 datarowbindイベントでid値を取得するにはどうすればよいですか?
私はあなたのような何かを行うことができると思いは、私は3次のフィールドがあります。 aspx?id = 'id'。GridViewのデータバインディングの質問私のテーブルの一
私はidフィールドをそれにバインドしないgridviewに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を作成しますコントロールの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
とは無関係のコードに触れることなく簡単に交換することができます。