如何将 dataGridView 预定义列与 sql 语句中的列绑定(不添加新列)?
Posted
技术标签:
【中文标题】如何将 dataGridView 预定义列与 sql 语句中的列绑定(不添加新列)?【英文标题】:How to bind dataGridView predefined columns with columns from sql statement (without adding new columns)? 【发布时间】:2009-11-16 10:27:19 【问题描述】:有没有一种优雅的方法,将预定义的 dataGridView 列与 SQL 语句的结果绑定?
例子:
dataGridView1.Columns.Add("EID", "ID");
dataGridView1.Columns.Add("FName", "FirstName");
一些类似的 SQL
SELECT t.FirstName AS FName, t.EmpID AS EID
FROM table t ...
然后我打电话给
dataGridView1.DataSource = someDataSet.Tables[0].DefaultView;
最后一次调用将列添加到我的数据网格,但我只想按列名绑定它而不是添加新列。
该示例将给出如下结果:
表格列:ID、FirstName、FName、EID(ID 和 FirstName 包含空单元格)
如何获得:
Table columns: ID, FirstName or FirstName, ID
最好的问候!
【问题讨论】:
【参考方案1】:使用dataGridView1.Columns["FName"].DataPropertyName = "FName"
,其中FName 是数据表中的列。
【讨论】:
这样就解决了问题,你的答案应该被标记为正确。【参考方案2】:除了将AutoGenerateColumns
设置为false外,还需要将DataGridView
中每一列的DataPropertyName
设置为数据源中对应的字段。您可以在设置 DataSource
属性之前在设计器或代码中进行设置。
【讨论】:
当您添加一列时,它只设置列名和标题 -- 而不是 DataPropertyName。【参考方案3】:我认为 DataGridView 有一个 AutoGenerateColumns
属性,不是吗?
dataGridView1.AutoGenerateColumns = True;
来自 MSDN 文档:
public bool AutoGenerateColumns set; 得到; System.Windows.Forms.DataGridView 的成员
摘要:获取或设置一个值 指示是否创建列 自动当 System.Windows.Forms.DataGridView.DataSource 要么 System.Windows.Forms.DataGridView.DataMember 属性已设置。
返回:如果列应该是 true 自动创建;否则, 错误的。默认为真。
该属性不在“属性”窗口中,您必须像我的示例一样通过代码设置它。
【讨论】:
尼尔,试过 dataGridView1.AutoGenerateColumns = True; and = false,但结果相同。没用。 您是否按照文档设置了 AutoGenerateColumns before 设置 DataSource 或 DataMember? 尝试在设置DataSource之前和之后设置它仍然不是我需要的。 现在列没问题,但是行是空的。 行数也可以,只有单元格是空的。【参考方案4】:如果您正在使用 WinForm,重要的部分是设置 DataPropertyName
属性以匹配 DataTable 列名称。您可以在设计器或代码中进行如下操作:
Me.AccountDataGridView.Columns("Account").DataPropertyName = "Account"
当然,已经设置了:
Me.AccountDataGridView.AutoGenerateColumns = False
【讨论】:
【参考方案5】:像这样在你的gridview的Columns标签中添加列怎么样?
<Columns>
<asp:BoundField DataField="EID" HeaderText="ID" />
<asp:BoundField DataField="FName" HeaderText="First name" />
...
【讨论】:
谢谢,但我使用的是winforms!以上是关于如何将 dataGridView 预定义列与 sql 语句中的列绑定(不添加新列)?的主要内容,如果未能解决你的问题,请参考以下文章