在运行时创建 ComboBox 时,为 DataGridView 内的 ComboBox 创建一个事件处理程序

本文关键字:ComboBox 创建 事件处理 程序 一个 DataGridView 运行时 内的 | 更新日期: 2023-09-27 18:37:04

我有一个名为table_assets的DataGridView,它是在设计器中创建的。

在运行时,DBAdapter 附加到 table_assets 的数据源,该数据源用列填充table_assets - 其中一列 [Headertext] 是:所有者。

"所有者"列是组合框的列。

此程序(以及上述程序)的一个要求是,列所有者内部组合框中的项,在所有当前使用的行中,必须从以下位置更改

<client>

<client>
<spouse>
Joint

全局布尔配偶活动是假的还是真的,值得尊敬。

我面临的挑战是告诉程序更改项目。在大多数情况下,我无法将事件处理程序添加到ComboBox,据我了解,这是更改项目的唯一方法。

这是我的相关代码,尽管我认为它没有多大用处 - 它会在comboBoxColumn_AssetsOwner_Selected崩溃:

bool spouseActive;
public Client()
{
            // table_assets
            assetsAdapter = new DBAdapter(database.clientAssets);
            assetsAdapter.ConstructAdaptor(null, " cID = " + clientID.ToString());
            table_assets.DataSource = (DataTable)assetsAdapter.ReturnTable();
            table_assets.CellClick += new DataGridViewCellEventHandler(comboBoxColumn_AssetsOwner_Selected);
}

private void comboBoxColumn_AssetsOwner_Selected(object sender, EventArgs e)
{  
        DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)sender;
        if (spouseActive == true)
        {
               cell.Items.Add("<spouse>");     
               cell.Items.Add("Joint");
               Debug.WriteLine("added");
        }
        else
        {  
               cell.Items.Remove("<spouse>");       
               cell.Items.Remove("Joint");
               Debug.WriteLine("removed");
        }
}

在运行时创建 ComboBox 时,为 DataGridView 内的 ComboBox 创建一个事件处理程序

尝试EditingControlShowing事件用于DataGridView

bool spouseActive;
public Client()
{
    // table_assets
    assetsAdapter = new DBAdapter(database.clientAssets);
    assetsAdapter.ConstructAdaptor(null, " cID = " + clientID.ToString());
    table_assets.DataSource = (DataTable)assetsAdapter.ReturnTable();
    table_assets.EditingControlShowing += table_assets_EditingControlShowing;
}
private void table_assets_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is ComboBox)
    {
        ComboBox cbMyComboBox = e.Control as ComboBox;
        if (spouseActive == true)
        {
           cbMyComboBox.Items.Add("<spouse>");     
           cbMyComboBox.Items.Add("Joint");
           Debug.WriteLine("added");
        }
        else
        {  
           cbMyComboBox.Items.Remove("<spouse>");       
           cbMyComboBox.Items.Remove("Joint");
           Debug.WriteLine("removed");
        }
    }
}