用现有列填充DataGridView的DataSource



是否有方法使用现有列填充DataGridView的DataSource?

我正在尝试将DataSource设置为我的DataGridView;每次设置DataSource时,它都会创建新的Columns,这不是预期的结果
我希望数据显示在现有列中。

这是我的代码:

DataTable dt = new DataTable();
dt.Columns.Add("SourcePath", typeof(string));
dt.Columns.Add("SourceFile", typeof(string));
dt.Columns.Add("OutputPath", typeof(string));
dt.Columns.Add("OutputFile", typeof(string));
dt.Columns.Add("Status", typeof(string));
dt.Columns.Add("Message", typeof(string));
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Belgium" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "France" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Germany" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Spain" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Switzerland" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "United Kingdom" });
datagridview.DataSource = dt;

我是不是做错了什么?

设置或更改DataGridView的DataSource时,默认行为是使用数据源中Columns的名称生成Columns,因为AutoGenerateColumes属性默认为true
请参阅文档中有关此属性的备注部分。

如果在设计器中添加了DataGridViewColumns,则会将每个列的DataPropertyName属性与数据源中列的名称进行比较
找到匹配项时,现有DataGridViewColumns将绑定到数据源中的匹配列。否则,将向轴网中添加一个新柱
换句话说,正如OP所描述的那样,当在设计器中添加没有DataPropertyName的列并且设置了新的DataSource时,DataSource中的列将添加到网格中已经存在的列中。

如果设计器中未指定DataGridViewColumn的DataPropertyName,则可以在分配DataSource属性之前在代码中对其进行设置。例如:

var dt = new DataTable();
dt.Columns.Add(new DataColumn("SourcePath", typeof(string)) { Caption = "Source Path"});  
// [...]
dt.Rows.Add(new[] { "Test", "Test", "Test", "Test", "Test", "Belgium" });
// [...]
// Assuming DGV Columns are added in the Designer without a DataPropertyName set
datagridview.Columns[0].DataPropertyName = dt.Columns[0].ColumnName
datagridview.Columns[0].HeaderText = dt.Columns[0].Caption
// Or in different ways, e.g.: 
datagridview.Columns["SourcePath"].DataPropertyName = dt.Columns[0].ColumnName
datagridview.Columns["SourcePath"].HeaderText = dt.Columns[0].Caption
// [...]
datagridview.DataSource = dt;

可能是语法导致的。

DataTable dt = new DataTable();
dt.Columns.Add("SourcePath", typeof(string));
dt.Columns.Add("SourceFile", typeof(string));
dt.Columns.Add("OutputPath", typeof(string));
dt.Columns.Add("OutputFile", typeof(string));
dt.Columns.Add("Status", typeof(string));
dt.Columns.Add("Message", typeof(string));


var Row = dt.NewRow(); //Create a new row
Row["SourcePath"] = "Test";//Add Column value via Indexer
//Add Rest of Column Values
dt.Rows.Add(Row); //Append to Table Rows

如果您不希望网格生成它在DataSource中找到的列,并且它本身似乎缺少这些列,请设置

datagridview.AutoGenerateColumns = false;

在设置DataSource 之前

最新更新