GridView根据列名取值
2010-02-05 15:26 Jeff Chow 阅读(1383) 评论(0) 收藏 举报早上看了一些关于GridView隐藏列的文章,才知道GridView有DataKeys这么一个属性。
从名字上看,它是该GridView的键的一个集合。但如果把所有的字段都设为键的话,它也就成了数据集合。
下面的例子实现了根据列名来取值。
aspx文件代码:
<body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> <Columns> <asp:BoundField DataField="id" Visible="false" /> <asp:BoundField DataField="department" /> <asp:BoundField DataField="age" /> <asp:BoundField DataField="name" /> <asp:BoundField DataField="salary" /> </Columns> </asp:GridView> </div> <div> <asp:Label ID="Label1" runat="server"></asp:Label> </div> </form> </body>
aspx.cs文件代码:
protected void Page_Load(object sender, EventArgs e) { //数据源 DataTable table = getDataTable(); //数据源列名 string[] columns = getColumnNames(table); //设置DataKeyNames属性 GridView1.DataKeyNames = columns; GridView1.DataSource = table; GridView1.DataBind(); int row = new Random().Next(0, 9); Label1.Text = GridView1.DataKeys[row]["name"].ToString(); } /// <summary> /// 数据源 /// </summary> /// <returns></returns> private DataTable getDataTable() { DataTable table = new DataTable("employee"); table.Columns.Add("id"); table.Columns.Add("name"); table.Columns.Add("age"); table.Columns.Add("department"); table.Columns.Add("salary"); for (int i = 0; i < 10; i++) { DataRow row = table.NewRow(); row[0] = i.ToString(); row[1] = "name" + i.ToString(); row[2] = "age" + i.ToString(); row[3] = "department" + i.ToString(); row[4] = "salary" + i.ToString(); table.Rows.Add(row); } return table; } /// <summary> /// 列名集合 /// </summary> /// <param name="table"></param> /// <returns></returns> private string[] getColumnNames(DataTable table) { string s = string.Empty; foreach (DataColumn c in table.Columns) { s += c.ColumnName + ","; } return s.TrimEnd(',').Split(','); }
根据MSDN原文:
当设置了 DataKeyNames 属性时,GridView 控件用来自指定字段的值填充它的 DataKeys 集合,这提供了一种访问每个行的主键的便捷方法。
设置了DataKeyNames以后,在绑定数据的时候,GridView会为每一行生成一个DataKey对象。
理论上,做的东西多了,自然速度就会慢点,但我个人确实不喜欢依赖于序号。
浙公网安备 33010602011771号