我有以下代码:
DataTable table = new DataTable();
//DataTable is filled with values here...
DataGridView grid = new DataGridView();
foreach (DataColumn column in table.Columns)
{
grid.Columns.Add(column.ColumnName, column.ColumnName);
}
grid.DataSource = table;
当我检查grid
时,DataSource
属性表示行数是正确的。但是,grid.Rows
计数为零。
相反,如果我在winform上创建DataGridView
,然后将其DataSource
分配给DataTable
,则会自动添加DataGridView.Rows
。
我在这里缺少哪些代码,以使DataGridView.Rows
计数正确?
答案 0 :(得分:5)
通过以编程方式将此DataGridView
控件添加到表单中,它可以正常工作:)
有人会告诉我们原因吗?
DataTable table = new DataTable();
//DataTable is filled with values here...
DataGridView grid = new DataGridView();
// assuming (this) is a reference to the current form
this.Controls.Add(grid);
grid.DataSource = table;
答案 1 :(得分:0)
DataTable table = new DataTable();
//DataTable is filled with values here...
DataGridView grid = new DataGridView();
grid.DataSource = table;
或
foreach (DataColumn column in table.Columns)
{
grid.Columns.Add(column.ColumnName, column.ColumnName);
}
grid.Rows.Add(table.Rows.count);
Int32 i=0;
foreach (DataRow rw in table.Rows)
{
grid.Rows[i].Cell[0].value = rw["col1"].ToString();
i+=1;
}
试用此代码
答案 2 :(得分:0)
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.ColumnIndex == 5)
{
string Task = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString();
if ( Task == "Delete")
{
if (MessageBox.Show("Bạn có chắc chắm muốn xóa không?", "Đang xóa...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int rowIndex = e.RowIndex;
dataGridView1.Rows.RemoveAt(rowIndex);
dataset.Tables["tbl_students"].Rows[rowIndex].Delete();
sqlAdapter.Update(dataset, "tbl_students");
}
}
else if(Task == "Insert")
{
int row = dataGridView1.Rows.Count - 2;
DataRow dr = dataset.Tables["tbl_students"].NewRow();
dr["id"] = dataGridView1.Rows[row].Cells["id"].Value;
dr["name"] = dataGridView1.Rows[row].Cells["name"].Value;
dr["address"] = dataGridView1.Rows[row].Cells["address"].Value;
dr["phone"] = dataGridView1.Rows[row].Cells["phone"].Value;
dr["email"] = dataGridView1.Rows[row].Cells["email"].Value;
dataset.Tables["tbl_students"].Rows.Add(dr);
dataset.Tables["tbl_students"].Rows.RemoveAt(dataset.Tables["tbl_students"].Rows.Count - 1);
dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 2);
dataGridView1.Rows[e.RowIndex].Cells[5].Value = "Delete";
sqlAdapter.Update(dataset, "tbl_students");
}
else if (Task == "Update")
{
int r = e.RowIndex;
dataset.Tables["tbl_students"].Rows[r]["id"] = dataGridView1.Rows[r].Cells["id"].Value;
dataset.Tables["tbl_students"].Rows[r]["name"] = dataGridView1.Rows[r].Cells["name"].Value;
dataset.Tables["tbl_students"].Rows[r]["address"] = dataGridView1.Rows[r].Cells["address"].Value;
dataset.Tables["tbl_students"].Rows[r]["phone"] = dataGridView1.Rows[r].Cells["phone"].Value;
dataset.Tables["tbl_students"].Rows[r]["email"] = dataGridView1.Rows[r].Cells["email"].Value;
sqlAdapter.Update(dataset, "tbl_students");
dataGridView1.Rows[e.RowIndex].Cells[5].Value = "Delete";
}
}
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}