直接更新我的表datagridviewcomboboxcolumn

时间:2009-11-15 00:11:47

标签: c# winforms data-binding datagridview

[注意:为了清晰起见,我简化了我的示例]

假设我有一个带有两个表的Sqlite数据库:Items和Sectors:

id_items : INTEGER PRIMARY KEY
name_item : VARCHAR(...)
id_sector : INTEGER

部分

id_sector : INTEGER PRIMARY KEY
name_sector : VARCHAR(...)

我目前有一个绑定到 Items 表的datagridview。它被送入正常状态,并且该表将该扇区显示为datagridviewcomboboxcolumns。

因此,在我的Winforms CustomControl中,我有load()方法中发生的所有数据加载和绑定:

colSector.DataSource = m_dataContext.SectorTable;
colSector.DisplayMember = "name_sector";
colSector.ValueMember = "id_sector";
ItemsGrid.DataSource = new DataView(m_dataContext.ItemsTable);

我的数据视图的组合框装载了 Sectors 表中的数据。

我现在希望我的表单上有一个按钮,可以创建一个新的扇区:

我创建了一个txtbox(txtNewSector)和一个触发创建的按钮:

    private void btnAddNewSector_Click(object sender, EventArgs e)
    {
        // Add new sector to db
        m_dataContext.AddNewSector(newSectorName);

        // refresh dataview so that comboboxes are updated with the new entry
        ???
    }

我该如何进行刷新?

我希望编辑能让问题更加明确,请指教....

最好的问候

2 个答案:

答案 0 :(得分:1)

而不是

???

添加

ItemsGrid.DataSource = new DataView(m_dataContext.ItemsTable);

答案 1 :(得分:0)

您可以使用timer。它将在一定的时间间隔后完成任务。

查看示例Timer in C#

你会发现使用它的想法。

我给出一些粗略的草图

private DataTable LoadData()
{
  DataTable  dt  = LoadDatabaseData();

  return dt;
}

private void timer1_Tick(object sender, System.EventArgs e)
{

   myDataGrid.DataSource = LoadData();

   myDataGrid.Databind();

         or 

  your combo box's datasource what ever.

}

注意 - 您正在使用SQLite,除了它是一个数据库之外我不知道。我只向您展示了如何调用将成为网格数据源的函数,并且每1秒后(我的意思是您指定的时间间隔)数据将被刷新。

希望这有帮助。