在为datagridview分配数据源时添加行

时间:2008-09-23 04:41:36

标签: c# .net

我为datagridview分配了一个数据源。现在如何向该网格添加一个新行并从中删除一行?

3 个答案:

答案 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设置为该行,因此它将显示为“已删除”给用户。