GridView中使用DataKeyNames存儲數據鍵值

源文轉自:http://www.cnblogs.com/heekui/archive/2008/04/09/1143831.html

 

      很多時候我們需要在GridView的RowCommand之類的事件中需要獲取當前行的一些關聯性的數據值。但這些數據值又沒有直接體現在GridView的列中。這個時候該怎麼辦呢?
有同學喜歡用隱藏列的方式,把需要使用但不顯示的字段綁定到此列上,同時設置列寬爲0或不顯示,使用時可以用常規的取某行某列的方式來獲取數據。
但是在Framework 2.0中,我們可以採用DataKeyNames的方式來獲取此類數據。

代碼示例:
(前臺)

        <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(); 
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章