如何在c#中将数据表绑定到datagridview

Posted

技术标签:

【中文标题】如何在c#中将数据表绑定到datagridview【英文标题】:how to bind datatable to datagridview in c# 【发布时间】:2013-10-01 11:09:49 【问题描述】:

我需要将我的 DataTable 绑定到我的 DataGridView。 我这样做:

        DTable = new DataTable();
        SBind = new BindingSource();
        //ServersTable - DataGridView
        for (int i = 0; i < ServersTable.ColumnCount; ++i)
        
            DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name));
        

        for (int i = 0; i < Apps.Count; ++i)
        
            DataRow r = DTable.NewRow();
            r.BeginEdit();
            foreach (DataColumn c in DTable.Columns)
            
                r[c.ColumnName] = //writing values
            
            r.EndEdit();
            DTable.Rows.Add(r);
        
        SBind.DataSource = DTable;
        ServersTable.DataSource = SBind;

但我得到的只是 DataTable 向我的 DataGridView 添加新的 列。 我不需要这个,我只需要写在现有的列下。

【问题讨论】:

您没有任何DataSet,您只有一个BindingSource 和一个DataTable。你的BindingSource 是空白的。 【参考方案1】:

试试这个:

    ServersTable.Columns.Clear();
    ServersTable.DataSource = SBind;

如果您不想清除所有现有列,则必须为每个现有列设置DataPropertyName,如下所示:

for (int i = 0; i < ServersTable.ColumnCount; ++i) 
  DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name));
  ServersTable.Columns[i].DataPropertyName = ServersTable.Columns[i].Name;

【讨论】:

【参考方案2】:

更好:

DataTable DTable = new DataTable();
BindingSource SBind = new BindingSource();
SBind.DataSource = DTable;
DataGridView ServersTable = new DataGridView();

ServersTable.AutoGenerateColumns = false;
ServersTable.DataSource = DTable;

ServersTable.DataSource = SBind;
ServersTable.Refresh();

您告诉可绑定源它已绑定到 DataTable,反过来您需要告诉 DataGridView 不要自动生成列,因此它只会为您手动输入的列提取数据控件...最后刷新控件以更新数据绑定。

【讨论】:

看起来你是对的,但现在它只是添加了新的空行,没有填充任何单元格。看起来 datagridview 不知道需要填充哪些列。 您必须表达 SBind.DataMember,通常是行的 ID。您需要为每一列设置 DataPropertyName,例如:***.com/questions/9154130/… 是的,在 DataGridView 上您必须设置 DataPropertyName。在那之后,这个解决方案就像一个魅力。非常感谢。【参考方案3】:

在 DataGridView 上,将列的 DataPropertyName 设置为 DataTable 的列名。

【讨论】:

【参考方案4】:

// 我首先构建了我的数据表,然后填充了它的列、行和所有内容。 //然后,一旦数据表功能正常,请执行以下操作将其绑定到 DGV。注意:对于此示例,DGV 的 AutoGenerateColumns 属性必须为“true”,否则将列名从数据表“分配”到 dgv 将不起作用。我之前也将我的数据表“添加”到数据集,但我认为没有必要。

 BindingSource SBind = new BindingSource();
 SBind.DataSource = dtSourceData;

 ADGView1.AutoGenerateColumns = true;  //must be "true" here
 ADGView1.Columns.Clear();
 ADGView1.DataSource = SBind;

 //set DGV's column names and headings from the Datatable properties
 for (int i = 0; i < ADGView1.Columns.Count; i++)
 
       ADGView1.Columns[i].DataPropertyName = dtSourceData.Columns[i].ColumnName;
       ADGView1.Columns[i].HeaderText = dtSourceData.Columns[i].Caption;
 
 ADGView1.Enabled = true;
 ADGView1.Refresh();

【讨论】:

【参考方案5】:
foreach (DictionaryEntry entry in Hashtable)

    datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString());

【讨论】:

【参考方案6】:
private void Form1_Load(object sender, EventArgs e)
    
        DataTable StudentDataTable = new DataTable("Student");

        //perform this on the Load Event of the form
        private void AddColumns() 
        
            StudentDataTable.Columns.Add("First_Int_Column", typeof(int));
            StudentDataTable.Columns.Add("Second_String_Column", typeof(String));

            this.dataGridViewDisplay.DataSource = StudentDataTable;
        
    

    //Save_Button_Event to save the form field to the table which is then bind to the TableGridView
    private void SaveForm()
        
            StudentDataTable.Rows.Add(new object[]  textBoxFirst.Text, textBoxSecond.Text);

            dataGridViewDisplay.DataSource = StudentDataTable;
        

【讨论】:

【参考方案7】:

例如,我们想通过以下 2 个步骤将 DataTable 'Users' 设置为 DataGridView: 第 1 步 - 获取所有用户:

public DataTable  getAllUsers()
    
        OracleConnection Connection = new OracleConnection(stringConnection);
        Connection.ConnectionString = stringConnection;
        Connection.Open();

        DataSet dataSet = new DataSet();

        OracleCommand cmd = new OracleCommand("semect * from Users");
        cmd.CommandType = CommandType.Text;
        cmd.Connection = Connection;

        using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
        
            dataAdapter.SelectCommand = cmd;
            dataAdapter.Fill(dataSet);
        

        return dataSet.Tables[0];
    

步骤 2- 将返回结果设置为 DataGridView :

public void setTableToDgv(DataGridView DGV, DataTable table)
    
        DGV.DataSource = table;
    

使用示例:

    setTableToDgv(dgv_client,getAllUsers());

【讨论】:

以上是关于如何在c#中将数据表绑定到datagridview的主要内容,如果未能解决你的问题,请参考以下文章

C#中datagridview如何绑定ArrayList集合?

如何从没有绑定源 C# 生成的 datagridview 中检索数据源?

如何实现c# winform DataGridView添加一行,添加数据后,保存到数据库?

在 Visual C# 中将选定行从 DataGridView 移动到另一个

在C#里怎么将DataGridView控件和数据库的查询绑定起来啊。

c#中将datagridview中数据导出到excel中,点击保存可以保存,点击取消就出