【问题标题】:How to Bind specific Columns of a datatable to a DataGridView?如何将数据表的特定列绑定到 DataGridView?
【发布时间】:2011-02-05 14:40:32
【问题描述】:

我的DataTable 从数据库中提取了三列,而我只需要将其中的两列绑定到DataGridView。你能帮我解决一下吗?

【问题讨论】:

  • asp.net winforms?请指定框架和/或语言

标签: datagridview datatable binding


【解决方案1】:

自己为 DataGridView 创建列。试试这样的。

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】:

    添加上面回答的列,别忘了设置:

    dataGridView1.AutoGenerateColumns = false;
    

    【讨论】:

    • 奇怪的是,AutoGenerateColumns 似乎并没有出现在我的智能感知中。当我刚刚输入 dataGridView1.AutoGenerateColumns=false 时,它​​完全按照预期工作,但令人困惑的是它没有显示出来。
    • 我按照这个问题的说明让智能感知与 datagridview 一起工作:stackoverflow.com/questions/43603438/…
    【解决方案3】:

    这是不久前提出的问题,因此您可能不需要此答案...希望其他人会发现它有用。

    我不得不做类似的事情,我发现最简单的解决方案是创建表的临时副本(其中存储您的数据),然后简单地删除有问题的列。例如:

    DataTable temp = YourDataTable;
    temp.Columns.Remove(temp.Columns[2]) // Will remove the third column for example
    YourDataTable.DataSource = temp;
    YourDataTable.DataBind();
    

    我认为这应该可以解决问题!

    干杯!

    【讨论】:

      【解决方案4】:
      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];
        }
      

      肯定会成功的。

      【讨论】:

        【解决方案5】:

        这可能有用

        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 ;
        

        【讨论】:

          【解决方案6】:

          我们可以创建一个包含所需列的新数据表,并从数据集中向其中添加行。然后我们可以用新创建的DataTable初始化DataGrid。

          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;
          

          【讨论】:

            【解决方案7】:

            将 DataTable 绑定到 DataGridView 之后隐藏不需要的列。

            dataGridView1.DataSource = datatable;
            dataGridView1.Columns["ColumnName"].Visible = false;
            

            【讨论】:

              猜你喜欢
              • 2016-11-19
              • 1970-01-01
              • 2010-11-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多