我有一个大约15列的数据集,我也有一个ASP.net gridview。我想知道是否有人知道如何使用数据集填充gridview,但问题是我只想要数据集中的一些列。
目前我正在做
GridView1.DataSource = ds;
GridView1.DataBind();
但这显然会将数据集中的所有列绑定到gridview。
答案 0 :(得分:10)
所以你想在运行时创建列?试试这个:
http://www.codeproject.com/KB/aspnet/dynamic_Columns_in_Grid.aspx
或者,您可以在aspx中提前配置gridview:
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />
<asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice" />
</Columns>
并确保将AutoGenerateColumns设置为false。
答案 1 :(得分:7)
默认情况下,GridView将根据绑定的数据自动生成所有列。
设置GridView.AutoGenerateColumns = false
,然后通过GridView.Columns
属性定义所需的列。
答案 2 :(得分:2)
我可以通过两种方式来实现这一目标,具体取决于您可以改变的内容以及保持原样的方式:
1)如果您可以控制生成数据集的查询/ proc,并且可以这样做而不会对其他网格/页面产生负面影响,请修改查询,使其仅选择您使用的列。您仍然可以在JOIN和WHERE中使用未选择的列,并且您可以获得额外的好处,即不必将每列添加到ORDER BY。
2)如果你只能控制网格和用于生成它的代码隐藏,你可以设置为DataGrid参数,AutoGenerateColumns = false,然后在你的DataGrid中嵌套你需要显示的BoundFields。这也允许您格式化,制作列名等等。
如果你可以做这两件事,你的网格也应该加载得更快。
答案 3 :(得分:1)
将网格AutoGeneratedColumns设置为false,并在gridview设计器或代码中设置要使用的列。但是您必须将列上的DataField属性设置为与
的名称相同答案 4 :(得分:0)
SqlCommand comm = new SqlCommand("Select required fields from YourTable, conn);
conn.Open();
SqlDataReader rdr = comm.ExecuteReader();
GridView1.DataSource = rdr;
GridView1.DataBind();
rdr.Close();
这将仅打印必填字段。