C# 基于列值填充datagrid视图中的下拉列表

C# 基于列值填充datagrid视图中的下拉列表,c#,winforms,datagridview,C#,Winforms,Datagridview,我想基于主活动Id列在windows窗体中的DataGridView中填充一个下拉列 我在存储过程返回的DataGridView中有main activity id和其他详细信息。因此,当用户单击子活动列时,我需要基于此父id填充子活动,然后基于此子活动填充另一个下拉列 ╔══════════════╦══════════════════╦══════════╗ ║ ActivityId ║ ActivityName ║ ParentId ║ ╠══════════════╬════

我想基于主活动Id列在windows窗体中的
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后,我也会收到相同的错误,请帮助。