C# 基于列值填充datagrid视图中的下拉列表
我想基于主活动Id列在windows窗体中的C# 基于列值填充datagrid视图中的下拉列表,c#,winforms,datagridview,C#,Winforms,Datagridview,我想基于主活动Id列在windows窗体中的DataGridView中填充一个下拉列 我在存储过程返回的DataGridView中有main activity id和其他详细信息。因此,当用户单击子活动列时,我需要基于此父id填充子活动,然后基于此子活动填充另一个下拉列 ╔══════════════╦══════════════════╦══════════╗ ║ ActivityId ║ ActivityName ║ ParentId ║ ╠══════════════╬════
DataGridView
中填充一个下拉列
我在存储过程返回的DataGridView
中有main activity id
和其他详细信息。因此,当用户单击子活动列时,我需要基于此父id填充子活动,然后基于此子活动填充另一个下拉列
╔══════════════╦══════════════════╦══════════╗
║ ActivityId ║ ActivityName ║ ParentId ║
╠══════════════╬══════════════════╬══════════╣
║ 10611801 ║ FootPath ║ 106118 ║
║ 10611802 ║ Staggared Drains ║ 106118 ║
║ 10611901 ║ Manual Weeding ║ 106119 ║
║ 10611902 ║ Chemical Weeding ║ 106119 ║
╚══════════════╩══════════════════╩══════════╝
我已尝试在DataGridView.CellClick
事件中填充该列,但我得到一个
无效值异常
在不同的主要活动上
public partial class CustomDropDown : Form
{
public CustomDropDown()
{
InitializeComponent();
}
public void BindGridData()
{
string selectQuery = "Select ActivityId as MainActivityId,ActivityName as MainActivity from ACTIVITY_MASTER_MST where ParentId is null";
var mainDataSource = Common.GetDatas(selectQuery);
dataGridView1.DataSource = mainDataSource;
string sourceQuery = "Select convert(varchar,ActivityId) as SubActivityId,ActivityName as SubActivityName from ACTIVITY_MASTER_MST";
var subActivityDataSource =Common.GetDatas(sourceQuery);
PopulateGridDropDown(SubActivityId, subActivityDataSource, "SubActivityName", "SubActivityId");
}
public void PopulateGridDropDown(DataGridViewComboBoxColumn cbo, DataTable source, string displayMember, string valueMember)
{
cbo.DataSource = source;
cbo.DisplayMember = displayMember;
cbo.ValueMember = valueMember;
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var index = dataGridView1.CurrentCell.ColumnIndex;
var rowIndex = dataGridView1.CurrentCell.RowIndex;
string columnName = this.dataGridView1.Columns[index].Name;
switch (columnName)
{
case "SubActivityId":
var parentId = dataGridView1[MainActivityId.Name, rowIndex].Value;
var strQuery = "Select convert(varchar,ActivityId) as SubActivityId,ActivityName as SubActivityName from ACTIVITY_MASTER_MST where ParentId=" + Convert.ToInt32( parentId);
DataTable source = new DataTable();
source = Common.GetDatas(strQuery);
PopulateGridDropDown(SubActivityId, source, "SubActivityName", "SubActivityId");
break;
default:
break;
}
}
private void CustomDropDown_Load(object sender, EventArgs e)
{
BindGridData();
}
}
请分享您的想法?欢迎来到StackOverflow!如果您向问题添加引发异常和堆栈跟踪的相关代码,我们可能会帮助您。列中的所有组合框必须具有相同的数据源。我过去使用的一个技巧是用每个值填充数据源,然后在
EditingControlShowing
event上应用一个过滤的数据视图,以便用户只看到相关的选择。即使在我将代码移动到EditingControlShowing event后,我也会收到相同的错误,请帮助。