将DataTable绑定到DataGridView的问题 - 我错过了一个步骤吗?

时间:2011-11-18 09:56:27

标签: c# datagridview

在我的Windows窗体应用程序中,我有一个DataGridView,它将通过后台代码中的DataTable以编程方式绑定。我这样做了好几个星期,但这是因为我没有在DGV设计器中手动指定列和列类型 - 因此在绑定表时会自动创建列。

一旦我手动给出列名和列名,并将DGV的AutoGenerateColumns属性设置为false,那么绑定后DGV中总是只有1行,并且所有值都为null - 所以看起来我的DataTable的值似乎是映射到DGV。我确保DGV中列的名称与我的DataTable中列的名称相匹配。

有什么想法吗?这里有一些代码(目前无法复制和粘贴任何代码,所以这里对我的内容大致了解):

DataTable dt = new DataTable();
dt.Columns.Add("ID",typeof(long));
//etc...

var linqQuery = //perform linq query to get data

foreach (var data in linqQuery)
{
   dt.Rows.Add(data.ID,//etc);
}

dgv.DataSource = dt;

3 个答案:

答案 0 :(得分:1)

由于您打开了AutoGenerateColumns,因此需要将DGV中每个列的DataPropertyName设置为DataSource中匹配的Column Name。

答案 1 :(得分:1)

我自己的白痴。我没有设置DataPropertyName。 D'哦。谢谢!

答案 2 :(得分:0)

您可以尝试这样..将datagrid视图列映射到datatable ..

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestWinApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }    
        private void Form1_Load(object sender, EventArgs e)
        {
            DataSet dsPlayerList = new DataSet();
            DataTable dt = new DataTable("PlayerList");
            dsPlayerList.Tables.Add(dt);

            dt.Columns.Add("ID",typeof(int));
            dt.Columns.Add("Name",typeof(string));
            dt.Columns.Add("Type", typeof(string));
            dt.Columns.Add("IP", typeof(string));

            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = "Player 1";
            dr["Type"] = "Standard";
            dr["IP"] = "127.0.0.1";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = 2;
            dr["Name"] = "Player 2";
            dr["Type"] = "Standard";
            dr["IP"] = "127.0.0.1";
            dt.Rows.Add(dr);

            dt.AcceptChanges();

            this.dgvPlayerList.AutoGenerateColumns = false;    
            DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
            col.DataPropertyName = "Name";
            col.Name = "Name";
            col.HeaderText = "Name";                
            this.dgvPlayerList.Columns.Add(col);

            col = new DataGridViewTextBoxColumn();
            col.DataPropertyName = "Type";
            col.Name = "Type";
            col.HeaderText = "Type";    
            this.dgvPlayerList.Columns.Add(col);

            this.dgvPlayerList.DataSource = dsPlayerList.Tables["PlayerList"];            
        }        
    }
}