GridViewでDataKeyNameを使用してデータキー値を格納
2501 ワード
GridViewのRowCommandのようなイベントでは、現在のローの関連データ値を取得する必要がある場合が多い.しかし、これらのデータ値はGridViewの列に直接反映されていません.この時はどうすればいいですか?ある学生は列を隠す方法で、使用する必要があるが表示しないフィールドをこの列にバインドするのが好きで、同時に列の幅を0に設定するか、表示しないかを設定して、使用する時に通常の行のある列を取る方法でデータを取得することができます.しかし、Framework 2.0では、このようなデータを取得するためにDataKeyNamesを使用することができます.コード例:(フロント)
Grup
表示する必要はありませんが、使用したい列です.(複数のフィールドがある場合はカンマで区切る)
(バックグラウンド)
ついでに補足します.
テンプレート列にボタンコントロールを配置する方法を使用すると、ボタンイベントでこのフィールド値を取得するのは簡単です.
ボタンのCommandArgumentプロパティをバインドしたいフィールドに設定するには、次のようにします.
ボタンイベントの書き込み:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Grup" OnRowCommand="GridView1_RowCommand" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("GrupName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField Text=" " />
</Columns>
</asp:GridView>
Grup
表示する必要はありませんが、使用したい列です.(複数のフィールドがある場合はカンマで区切る)
(バックグラウンド)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack )
{
DataTable dt = new DataTable();
dt.Columns.Add("Grup");
dt.Columns.Add("GrupName");
dt.Rows.Add(new object[] { 0," " });
dt.Rows.Add(new object[] { 1," " });
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
//
int index = Convert.ToInt32(e.CommandArgument);
//
string strGrup = ((GridView)sender).DataKeys[index].Values["Grup"].ToString();
}
ついでに補足します.
テンプレート列にボタンコントロールを配置する方法を使用すると、ボタンイベントでこのフィールド値を取得するのは簡単です.
ボタンのCommandArgumentプロパティをバインドしたいフィールドに設定するには、次のようにします.
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" CommandArgument=' <%#Eval("Grup") %>' />
</ItemTemplate>
</asp:TemplateField>
ボタンイベントの書き込み:
protected void Button2_Click(object sender, EventArgs e)
{
string strGrup = ((Button)sender).CommandArgument.ToString();
}