15

Is there a elegant way, to bind predefined dataGridView columns with results from a SQL statement?

Example:

dataGridView1.Columns.Add("EID", "ID");
dataGridView1.Columns.Add("FName", "FirstName");

Some SQL like

SELECT t.FirstName AS FName, t.EmpID AS EID 
FROM table t ...

and then I call

 dataGridView1.DataSource = someDataSet.Tables[0].DefaultView;

The last call add columns to my datagrid but I just want to bind it by column name not to add new columns.

The example will give a result like this:

Table columns: ID, FirstName, FName, EID (ID and FirstName holds empty cells)

How to get this:

Table columns: ID, FirstName or FirstName, ID

Best regards!

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Jooj
  • 687
  • 4
  • 15
  • 32

5 Answers5

22

Use dataGridView1.Columns["FName"].DataPropertyName = "FName" where FName is column in your data table.

NoWar
  • 36,338
  • 80
  • 323
  • 498
Iftikhar
  • 221
  • 2
  • 2
17

Aside from setting AutoGenerateColumns to false, you also need to set DataPropertyName for each column in the DataGridView to the corresponding field in the data source. You can set this in the designer or in code before setting the DataSource property.

Nimantha
  • 6,405
  • 6
  • 28
  • 69
jaybz
  • 179
  • 1
  • 3
4

I think the DataGridView has an AutoGenerateColumns property, doesn't it?

dataGridView1.AutoGenerateColumns = True;

From the MSDN docs:

public bool AutoGenerateColumns { set; get; } Member of System.Windows.Forms.DataGridView

Summary: Gets or sets a value indicating whether columns are created automatically when the System.Windows.Forms.DataGridView.DataSource or System.Windows.Forms.DataGridView.DataMember properties are set.

Returns: true if the columns should be created automatically; otherwise, false. The default is true.

The property isn't on the Properties window though, you have to set it via code as in my example.

Neil Barnwell
  • 41,080
  • 29
  • 148
  • 220
  • Neil, tried dataGridView1.AutoGenerateColumns = True; and = false, but the same result. Doesn't work. – Jooj Nov 16 '09 at 12:01
  • 1
    Are you setting AutoGenerateColumns **before** setting DataSource or DataMember, as per the docs? – Neil Barnwell Nov 16 '09 at 14:43
  • Tried to set it before and after setting DataSource and still not what I need. – Jooj Nov 16 '09 at 16:38
  • The columns now are ok, but the rows are empty. – Jooj Nov 16 '09 at 16:44
  • Also the row count is ok, only the cells are empty. – Jooj Nov 16 '09 at 16:49
  • Cool! Solved the problem with your help! I have added rows to DataGrid programmly as List from the XAML.CS file, with previously initilalized DataGrid in XAML with the `AutoGenerateColumns="True"`. On the Run, all the inialized columns were filled with values, but new columns with variables names in header also were created. Setting the attribute False removed this problem. – A.Ametov Mar 17 '19 at 07:06
3

If you are doing WinForm, the important part is setting the DataPropertyName property to match the DataTable Column name. You can do it in the designer or code as follows:

Me.AccountDataGridView.Columns("Account").DataPropertyName = "Account"

Of course, having set this:

Me.AccountDataGridView.AutoGenerateColumns = False
Hannington Mambo
  • 998
  • 2
  • 13
  • 28
0

How about adding columns to the Columns tag of your gridview like so?

<Columns>
<asp:BoundField DataField="EID" HeaderText="ID" />
<asp:BoundField DataField="FName" HeaderText="First name" />
...
adrianos
  • 1,501
  • 2
  • 18
  • 22