在 运行 时间创建 ComboBox 时,为 DataGridView 内的 ComboBox 创建事件处理程序
Create an EventHandler for ComboBox's that are inside a DataGridView, when ComboBox is created at Run time
我有一个名为 table_assets 的 DataGridView,它是在设计器中创建的。
在运行时,DBAdapter 附加到 table_assets 的数据源,它用列填充 table_assets - 其中一列 [Headertext] 是:所有者。
Owner 列是 ComboBox 的一列。
此程序(连同上述程序)的一个要求是 所有 当前使用的行中列所有者内的组合框中的项目必须更改为:
<client>
到
<client>
<spouse>
Joint
当 global Boolean spouseActive 为 false 或 true 时,respectly.
我面临的挑战是告诉程序更改项目。在大多数情况下,我一直无法向组合框添加事件处理程序,据我所知,这是更改项目的唯一方法。
这是我的相关代码,虽然我认为它不会有多大用处 - 它会在 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");
}
}
尝试为 DataGridView
使用 EditingControlShowing
事件:
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");
}
}
}
我有一个名为 table_assets 的 DataGridView,它是在设计器中创建的。
在运行时,DBAdapter 附加到 table_assets 的数据源,它用列填充 table_assets - 其中一列 [Headertext] 是:所有者。
Owner 列是 ComboBox 的一列。
此程序(连同上述程序)的一个要求是 所有 当前使用的行中列所有者内的组合框中的项目必须更改为:
<client>
到
<client>
<spouse>
Joint
当 global Boolean spouseActive 为 false 或 true 时,respectly.
我面临的挑战是告诉程序更改项目。在大多数情况下,我一直无法向组合框添加事件处理程序,据我所知,这是更改项目的唯一方法。
这是我的相关代码,虽然我认为它不会有多大用处 - 它会在 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");
}
}
尝试为 DataGridView
使用 EditingControlShowing
事件:
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");
}
}
}