GridView 使用DataKeyNames属性

     今天在做项目的时候用到了 GridView控件 在这个控件里添加了一个模板列,然后放了个imagebuttion,点击按钮的时候进入编辑页面,当然数据可定要加载出来的,

这里也说一下编辑,我用的编辑是detailsview,我在这个控件里添加了更新列,然后设置visible=false,当加载这个页面的时候设置为编辑状态,代码如下:

 this.DetailsView1.ChangeMode(DetailsViewMode.Edit);更新就有点麻烦了,我是自己添加了个按钮,我不知道如何调用更新,最后只能用笨办法了,

一个一个的取出每一列,然后调用自定义更新方法。

     好了,说了这么多,进正题吧,在asp.net2.0中,当我们需要在GridView的ItemDataBound之类的事件中需要获取当前行的一些关联性的数据值,

但这些数据值又不能直接体现在GridView的列中显示出来,这时我们可以采用DataKeyNames的方式来获取此类数据,我们可以设置GridView的DataKeyNames属性,

代码写也一样,看一下基本语法:

DataKeyNames='FID'   绑定一个值
GridView1.DataKeys[e.Row.RowIndex].Value.ToString;

DataKeyNames='FID,FName'   绑定两个值
GridView1.DataKeys[e.Row.RowIndex].Values[0].ToString;
GridView1.DataKeys[e.Row.RowIndex].Values[1].ToString;


 

1. 按钮获取

protected void Copy_Click(object sender, EventArgs e)
    {
        
int index=((GridViewRow)(((Button)sender).Parent.Parent)).RowIndex;

         String value
= GridView1.DataKeys[index]["Name"].ToString(); 

    }

解释: 一层一层往上找。通过现在的button找到他所在的cell,然后再调用parent,就找他所在的行,然后取rowindex

2. 行命令触发

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        // 获取当前行索引
        int index = Convert.ToInt32(e.CommandArgument);

        // 取出当前行数据键值对象中的值
        string strGrup = ((GridView)sender).DataKeys[index].Values["Grup"].ToString(); 
    }

3. 如果你使用模板列中放置按钮控件的方式,要想在按钮事件中获取这种字段值就更简单了。

只需要在按钮的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();
}

总结:找了3个列子,估计大家肯定也都对DataKeyNames属性有一定的了解了,有什么问题请大家指出,我随时关注

原文地址:https://www.cnblogs.com/myssh/p/1395824.html