我为datagridview分配了一个数据源。现在如何向该网格添加一个新行并从中删除一行?
答案 0 :(得分:10)
执行此操作的一种方法如下:
步骤#1 设置数据适配器,数据网格等:
// the data grid
DataGridView dataGrid;
// create a new data table
DataTable table = new DataTable();
// create the data adapter
SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strDSN);
// populate the table using the SQL adapter
dataAdapter.Fill(table);
// bind the table to a data source
BindingSource dbSource = new BindingSource();
dbSource.DataSource = table;
// finally bind the data source to the grid
dataGrid.DataSource = dbSource;
步骤#2 设置数据适配器SQL命令:
这些SQL命令定义了如何通过适配器在网格和数据库之间移动数据。
dataAdapter.DeleteCommand = new SqlCommand(...);
dataAdapter.InsertCommand = new SqlCommand(...);
dataAdapter.UpdateCommand = new SqlCommand(...);
第3步要删除的代码从数据网格中选择行:
public int DeleteSelectedItems()
{
int itemsDeleted = 0;
int count = dataGrid.RowCount;
for (int i = count - 1; i >=0; --i)
{
DataGridViewRow row = dataGrid.Rows[i];
if (row.Selected == true)
{
dataGrid.Rows.Remove(row);
// count the item deleted
++itemsDeleted;
}
}
// commit the deletes made
if (itemsDeleted > 0) Commit();
}
步骤#4 处理行插入和行更改:
这些类型的更改相对容易实现,因为您可以让网格管理单元格更改和新行插入。
您唯一需要决定的是您何时提交这些更改。
我建议将提交放在DataGridView的 RowValidated 事件处理程序中,因为那时你应该有一整行数据。
步骤#5 提交将更改保存回数据库的方法:
此函数将处理所有挂起的更新,插入和删除,并将这些更改从网格移回数据库。
public void Commit()
{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Do the connection using a DSN";
// open the connection
cn.Open();
// commit any data changes
dataAdapter.DeleteCommand.Connection = cn;
dataAdapter.InsertCommand.Connection = cn;
dataAdapter.UpdateCommand.Connection = cn;
dataAdapter.Update(table);
dataAdapter.DeleteCommand.Connection = null;
dataAdapter.InsertCommand.Connection = null;
dataAdapter.UpdateCommand.Connection = null;
// clean up
cn.Close();
}
答案 1 :(得分:0)
我相信您必须获取Table集合项并从中检索Row集合项。然后你可以循环遍历行,或者你想要删除行。
当然,你在绑定之后就这样做了。
答案 2 :(得分:0)
GridView中的属性“行”没有删除方法,因为您无法直接删除行。您必须从数据源中删除项目,而不是重制DataBind。您还可以将Visibile = false设置为该行,因此它将显示为“已删除”给用户。