My DataTable
has three columns fetched from a database, while I need to bind only two columns of it to a DataGridView
. Can you please help me with it?

- 2,729
- 4
- 25
- 37

- 151
- 1
- 1
- 3
-
asp.net winforms? please specify the framework and/or language – naveen Feb 05 '11 at 14:50
7 Answers
Create the columns for the DataGridView yourself. Try something like this.
DataGridView dataGridView1 = new DataGridView();
BindingSource bindingSource1 = new BindingSource();
dataGridView1.ColumnCount = 2;
dataGridView1.Columns[0].Name = "Field1";
dataGridView1.Columns[0].DataPropertyName = "Field1";
dataGridView1.Columns[1].Name = "Field2";
dataGridView1.Columns[1].DataPropertyName = "Field2";
bindingSource1.DataSource = GetDataTable();
dataGridView1.DataSource = bindingSource1;

- 2,689
- 1
- 15
- 11
Add the column as answered above, and do not forget to set:
dataGridView1.AutoGenerateColumns = false;
-
Weirdly, AutoGenerateColumns doesn't seem to show up in intellisense for me. When I just typed in dataGridView1.AutoGenerateColumns=false it worked exactly as intended, but it was confusing that it didn't show up. – AndyD273 Apr 08 '19 at 13:12
-
I followed the instructions on this question to get intellisense to work right with the datagridview: https://stackoverflow.com/questions/43603438/incomplete-list-of-properties-methods-in-intellisense – AndyD273 Apr 08 '19 at 15:41
This was asked a while ago, so you probably won't need this answer... Hopefully others will find it useful.
I had to do something similar, and I found that the simplest solution was to create a temporary copy of the table (in which your data is stored) and then to simply remove the column in question. For example:
DataTable temp = YourDataTable;
temp.Columns.Remove(temp.Columns[2]) // Will remove the third column for example
YourDataTable.DataSource = temp;
YourDataTable.DataBind();
I think this should do the trick!
Cheers!

- 31
- 2
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("connection string");
SqlDataAdapter adp = new SqlDataAdapter("select Fieldname1,fieldname2 from Table Name", con);
DataSet ds = new DataSet();
ds.Clear();
adp.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
dataGridView1.DataSource = ds.Tables[0];
}
Definitely it will work.
We can create a new DataTable with the required Columns and add rows to it from the Dataset. Then we can initialize the DataGrid with the Newly Created DataTable.
dt = new DataTable();
dt_Property.Columns.Add("Field1");
dt_Property.Columns.Add("Field2");
int i = 0;
DataRow row = null;
foreach (DataRow r in ds.Tables[0].Rows)
{
row = dt.NewRow();
row["Field1"] = ds.Tables[0].Rows[i][1];
row["Field2"] = ds.Tables[0].Rows[i][2];
dt_Property.Rows.Add(row);
i = i + 1;
}
dataGridView1.DataSource = dt;
Bind DataTable to DataGridView after that hide the column you don't want.
dataGridView1.DataSource = datatable;
dataGridView1.Columns["ColumnName"].Visible = false;

- 181
- 1
- 4
This may be useful
DataSet ds = new DataSet(); <-- Get data from Database here
DataTable dt = ds.Tables[0];
DataView view = new DataView(dt);
DataTable resultTable = view.ToTable(false, "Column1",
"Column2","Column3","Column4","Column5","Column6");
dataGridView.DataSource = resultTable ;

- 47
- 1
- 9