Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将数据源重新绑定到winform DataGridView组合框列?_C#_Winforms_Datagridview_Combobox - Fatal编程技术网

C# 如何将数据源重新绑定到winform DataGridView组合框列?

C# 如何将数据源重新绑定到winform DataGridView组合框列?,c#,winforms,datagridview,combobox,C#,Winforms,Datagridview,Combobox,我在winform中有一个DataGridView,它有两个组合框列:1)公司,2)帐户。 我想根据所选公司更新帐户组合框。 我有以下代码: void recipientsDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { try { ComboBox cb = e.Control as Combo

我在winform中有一个DataGridView,它有两个组合框列:1)公司,2)帐户。 我想根据所选公司更新帐户组合框。 我有以下代码:

void recipientsDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        try
        {
            ComboBox cb = e.Control as ComboBox;
            if (cb != null)
            {
                cb.SelectedValueChanged -= new EventHandler(companyCombobox_SelectedValueChanged);
                cb.SelectedValueChanged += new EventHandler(companyCombobox_SelectedValueChanged);
            }
        }
        catch (Exception ex)
        {

        }
    }

    private void companyCombobox_SelectedValueChanged(object sender, EventArgs e)
    {
        try
        {
            var currentCell = recipientsDataGrid.CurrentCellAddress;
            if (currentCell.X == 3)
            {
                var sendingCB = sender as DataGridViewComboBoxEditingControl;
                int companyId = sendingCB.SelectedValue.ToInt();
                DataTable dtAccounts = m_CustomersFunctions.GetCompanyAccounts(companyId);

                DataGridViewComboBoxCell cboAccounts = (DataGridViewComboBoxCell)recipientsDataGrid.Rows[currentCell.Y].Cells["Account"];
                cboAccounts.ValueMember = "account_id";
                cboAccounts.DisplayMember = "AccountName";
                cboAccounts.DataSource = dtAccounts;

                int defaultAccountId = (from row in dtAccounts.AsEnumerable()
                                        where row.Field<string>("AccountName").EndsWith("*")
                                        select row.Field<int>("account_id")).FirstOrDefault();
                if (defaultAccountId > 0)
                    cboAccounts.Value = defaultAccountId;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
void recipientsDataGrid\u EditingControlShowing(对象发送方,DataGridViewEditingControlShowingEventArgs e)
{
尝试
{
组合框cb=e。控件作为组合框;
如果(cb!=null)
{
cb.SelectedValueChanged-=新事件处理程序(companyCombobox\U SelectedValueChanged);
cb.SelectedValueChanged+=新事件处理程序(companyCombobox\U SelectedValueChanged);
}
}
捕获(例外情况除外)
{
}
}
私有无效公司邮箱\所选值已更改(对象发送方,事件参数e)
{
尝试
{
var currentCell=recipientsDataGrid.CurrentCellAddress;
如果(currentCell.X==3)
{
var sendingCB=作为DataGridViewComboBoxEditingControl的发送方;
int companyId=sendingCB.SelectedValue.ToInt();
DataTable dtAccounts=m_CustomerFunctions.GetCompanyAccounts(companyId);
DataGridViewComboBoxCell CBOAAccounts=(DataGridViewComboxCell)recipientsDataGrid.Rows[currentCell.Y]。单元格[“Account”];
cboAccounts.ValueMember=“账户id”;
cboAccounts.DisplayMember=“AccountName”;
cboAccounts.DataSource=dtAccounts;
int defaultAccountId=(来自dtAccounts.AsEnumerable()中的行)
其中row.Field(“AccountName”).EndsWith(“*”)
选择row.Field(“帐户id”).FirstOrDefault();
如果(defaultAccountId>0)
cboAccounts.Value=defaultAccountId;
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
}
在我第一次选择公司时,它工作正常,但当我更改公司并尝试更新帐户组合框的数据源时,我收到一个错误:

我试图手动添加项目,而不是使用数据源,但我得到了相同的错误。 我怎样才能修好它?
请…

在重新绑定之前,尝试清除accounts单元格的值,如下所示:

private void companyCombobox_SelectedValueChanged(object sender, EventArgs e)
{
    try
    {
        var currentCell = recipientsDataGrid.CurrentCellAddress;
        if (currentCell.X == 3)
        {
            var sendingCB = sender as DataGridViewComboBoxEditingControl;
            int companyId = sendingCB.SelectedValue.ToInt();
            DataTable dtAccounts = m_CustomersFunctions.GetCompanyAccounts(companyId);

            DataGridViewComboBoxCell cboAccounts = (DataGridViewComboBoxCell)recipientsDataGrid.Rows[currentCell.Y].Cells["Account"];
            cboAccounts.Value = null; //Add this code
            cboAccounts.ValueMember = "account_id";
            cboAccounts.DisplayMember = "AccountName";
            cboAccounts.DataSource = dtAccounts;

            int defaultAccountId = (from row in dtAccounts.AsEnumerable()
                                    where row.Field<string>("AccountName").EndsWith("*")
                                    select row.Field<int>("account_id")).FirstOrDefault();
            if (defaultAccountId > 0)
                cboAccounts.Value = defaultAccountId;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
private void companyCombobox\u SelectedValueChanged(对象发送方,事件参数e)
{
尝试
{
var currentCell=recipientsDataGrid.CurrentCellAddress;
如果(currentCell.X==3)
{
var sendingCB=作为DataGridViewComboBoxEditingControl的发送方;
int companyId=sendingCB.SelectedValue.ToInt();
DataTable dtAccounts=m_CustomerFunctions.GetCompanyAccounts(companyId);
DataGridViewComboBoxCell CBOAAccounts=(DataGridViewComboxCell)recipientsDataGrid.Rows[currentCell.Y]。单元格[“Account”];
cboAccounts.Value=null;//添加此代码
cboAccounts.ValueMember=“账户id”;
cboAccounts.DisplayMember=“AccountName”;
cboAccounts.DataSource=dtAccounts;
int defaultAccountId=(来自dtAccounts.AsEnumerable()中的行)
其中row.Field(“AccountName”).EndsWith(“*”)
选择row.Field(“帐户id”).FirstOrDefault();
如果(defaultAccountId>0)
cboAccounts.Value=defaultAccountId;
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
}

尝试在重新绑定accounts单元格之前清除其值,如下所示:

private void companyCombobox_SelectedValueChanged(object sender, EventArgs e)
{
    try
    {
        var currentCell = recipientsDataGrid.CurrentCellAddress;
        if (currentCell.X == 3)
        {
            var sendingCB = sender as DataGridViewComboBoxEditingControl;
            int companyId = sendingCB.SelectedValue.ToInt();
            DataTable dtAccounts = m_CustomersFunctions.GetCompanyAccounts(companyId);

            DataGridViewComboBoxCell cboAccounts = (DataGridViewComboBoxCell)recipientsDataGrid.Rows[currentCell.Y].Cells["Account"];
            cboAccounts.Value = null; //Add this code
            cboAccounts.ValueMember = "account_id";
            cboAccounts.DisplayMember = "AccountName";
            cboAccounts.DataSource = dtAccounts;

            int defaultAccountId = (from row in dtAccounts.AsEnumerable()
                                    where row.Field<string>("AccountName").EndsWith("*")
                                    select row.Field<int>("account_id")).FirstOrDefault();
            if (defaultAccountId > 0)
                cboAccounts.Value = defaultAccountId;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
private void companyCombobox\u SelectedValueChanged(对象发送方,事件参数e)
{
尝试
{
var currentCell=recipientsDataGrid.CurrentCellAddress;
如果(currentCell.X==3)
{
var sendingCB=作为DataGridViewComboBoxEditingControl的发送方;
int companyId=sendingCB.SelectedValue.ToInt();
DataTable dtAccounts=m_CustomerFunctions.GetCompanyAccounts(companyId);
DataGridViewComboBoxCell CBOAAccounts=(DataGridViewComboxCell)recipientsDataGrid.Rows[currentCell.Y]。单元格[“Account”];
cboAccounts.Value=null;//添加此代码
cboAccounts.ValueMember=“账户id”;
cboAccounts.DisplayMember=“AccountName”;
cboAccounts.DataSource=dtAccounts;
int defaultAccountId=(来自dtAccounts.AsEnumerable()中的行)
其中row.Field(“AccountName”).EndsWith(“*”)
选择row.Field(“帐户id”).FirstOrDefault();
如果(defaultAccountId>0)
cboAccounts.Value=defaultAccountId;
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
}

尝试在重新绑定accounts单元格之前清除其值,如下所示:

private void companyCombobox_SelectedValueChanged(object sender, EventArgs e)
{
    try
    {
        var currentCell = recipientsDataGrid.CurrentCellAddress;
        if (currentCell.X == 3)
        {
            var sendingCB = sender as DataGridViewComboBoxEditingControl;
            int companyId = sendingCB.SelectedValue.ToInt();
            DataTable dtAccounts = m_CustomersFunctions.GetCompanyAccounts(companyId);

            DataGridViewComboBoxCell cboAccounts = (DataGridViewComboBoxCell)recipientsDataGrid.Rows[currentCell.Y].Cells["Account"];
            cboAccounts.Value = null; //Add this code
            cboAccounts.ValueMember = "account_id";
            cboAccounts.DisplayMember = "AccountName";
            cboAccounts.DataSource = dtAccounts;

            int defaultAccountId = (from row in dtAccounts.AsEnumerable()
                                    where row.Field<string>("AccountName").EndsWith("*")
                                    select row.Field<int>("account_id")).FirstOrDefault();
            if (defaultAccountId > 0)
                cboAccounts.Value = defaultAccountId;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
private void companyCombobox\u SelectedValueChanged(对象发送方,事件参数e)
{
尝试
{
var currentCell=recipientsDataGrid.CurrentCellAddress;
如果(currentCell.X==3)
{
var sendingCB=作为DataGridViewComboBoxEditingControl的发送方;
int companyId=sendingCB.SelectedValue.ToInt();
DataTable dtAccounts=m_CustomerFunctions.GetCompanyAccounts(companyId);
DataGridViewComboBoxCell CBOAAccounts=(DataGridViewComboxCell)recipientsDataGrid.Rows[currentCell.Y]。单元格[“Account”];
cboAccounts.Value=null;//添加此代码
cboAccounts.ValueMember=“账户id”;
cboAccounts.DisplayMember=“AccountName”;
cboAccounts.DataSource=dtAccounts;
int defaultAccountId=(来自dtAccounts.AsEnumerable()中的行)
其中row.Field(“AccountName”).EndsWith(“*”)
选择row.Field(“帐户id”).FirstOrDefault();
如果(defaultAccountId>