【发布时间】:2020-10-15 23:07:53
【问题描述】:
我已将 datagridview 与 access 数据库表绑定。我想在程序加载时向 DataGridView 添加一个新的自定义列。此列包含数据表中行的自动递增编号“序列号”。代码如下,
using (var conn = new OleDbConnection(DatabaseObjects.ConnectionString))
{
conn.Open();
command = new OleDbCommand("SELECT s.RollNo, s.SName, s.FName, s.DOB, c.Class, s.[Section],s.Picture from students as s left outer join classes as c " +
"on c.ClassID = s.ClassID", conn);
dTable = new DataTable();
dTable.Load(command.ExecuteReader());
dgvDisplay.Columns.Add("SrNo", "Sr No"); // Adding "Serial No" Column to DataGridView
dgvDisplay.DataSource = dTable;
dgvDisplay.Sort(dgvDisplay.Columns["RollNo"], ListSortDirection.Ascending);
// Change Column Headings
dgvDisplay.Columns["RollNo"].HeaderText = "Roll No";
dgvDisplay.Columns["SName"].HeaderText = "Student Name";
dgvDisplay.Columns["FName"].HeaderText = "Father Name";
dgvDisplay.Columns["DOB"].HeaderText = "Date Of Birth";
// Serial Number code
int srNo = 1;
foreach(DataGridViewRow row in dgvDisplay.Rows)
{
row.Cells["SrNo"].Value = srNo;
srNo++;
}
}
但是当我运行程序时,序列号列是空的。此列必须在 gridview 中显示 1,2,3.. 之类的数字。
现在我更改了添加新列的代码。我在下面尝试这段代码
dTable.Columns.Add(new DataColumn("SrNo", typeof(Int32))); // Adding "Serial No" Column to DataTable
dgvDisplay.DataSource = dTable;
dgvDisplay.Sort(dgvDisplay.Columns["RollNo"], ListSortDirection.Ascending);
// Serial Number code
int srNo = 1;
foreach (DataRow row in dTable.Rows)
{
row["SrNo"] = srNo;
srNo++;
}
这会生成序列号,但会根据数据表的顺序插入记录行。
【问题讨论】:
-
就个人而言,我会将列添加到数据表中,用数据填充它,然后将其绑定到数据网格视图。
-
您可以尝试将数据源的分配 (
dgvDisplay.DataSource = dTable) 移到 Columns.Add 行上方。我认为当您分配数据源时,您添加的列可能会被覆盖。 -
我已将 DataSource 的分配移到新的 Column Add 行之前。但还是空的。
-
@Crowcoder 我该怎么做?将列添加到数据表
-
dTable.Columns.Add( < your choice of overloads >)
标签: c# sql winforms ms-access datagridview