【问题标题】:ASP.net programmatically bind dataset to gridviewASP.net 以编程方式将数据集绑定到 gridview
【发布时间】:2011-09-15 13:44:43
【问题描述】:
我有一个大约 15 列的数据集,还有一个 ASP.net 网格视图。我想知道是否有人知道如何使用数据集填充 gridview,但问题是我只想要数据集中的一些列。
目前我只是在做
GridView1.DataSource = ds;
GridView1.DataBind();
但这显然会将数据集中的所有列绑定到gridview。
【问题讨论】:
标签:
c#
asp.net
data-binding
gridview
【解决方案1】:
所以您希望在运行时创建列?试试这个:
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。
【解决方案2】:
GridView默认会根据绑定的数据自动生成所有的列。
设置GridView.AutoGenerateColumns = false,然后通过GridView.Columns属性定义你想要的列。
【解决方案3】:
我认为有两种方法可以做到这一点,具体取决于您可以更改什么以及必须保持原样:
1) 如果您可以控制生成数据集的查询/过程,并且可以这样做而不会对其他网格/页面产生不利影响,请修改查询,使其仅选择您使用的列。您仍然可以在 JOIN 和 WHERE 中使用未选择的列,并且您可以获得额外的好处,即不必将每一列都添加到 ORDER BY。
2) 如果您只能控制网格和用于生成它的代码隐藏,则可以将 AutoGenerateColumns = false 设置为 DataGrid 参数,然后嵌套在您的 DataGrid 中,即您需要显示的 BoundFields。这也使您能够格式化、制作列名等。
如果您可以同时执行这两项操作,那么您的 Grid 加载速度也应该更快。
【解决方案4】:
将网格 AutoGeneratedColumns 设置为 false,并设置要在 gridview 设计器或代码中使用的列。但是您必须将列上的 DataField 属性设置为与
的名称相同
【解决方案5】:
SqlCommand comm = new SqlCommand("Select required fields from YourTable, conn);
conn.Open();
SqlDataReader rdr = comm.ExecuteReader();
GridView1.DataSource = rdr;
GridView1.DataBind();
rdr.Close();
这将只打印必填字段。