如题,我的页面上有两个dgv,这两个dgv都有一列combobox,combobox列绑定了同一个数据源,当我编辑其中一个dgv的combobox的时候他就会报错,错误是 设置 DataSource 属性后无法修改项集合
下面是我绑定combobox的代码private void CreateCustomsRateP()
{
DataTable dt = Basis_CustomsRateManager.Basis_CustomsRateDataTable;
if (dt.Columns.Contains("Rate"))
{
dt.Columns["Rate"].ColumnName = "CustomsRate";
dgvcmbCustomsRate_Pay.DisplayMember = "CustomsRate";
dgvcmbCustomsRate_Pay.ValueMember = "CustomsRate";
dgvcmbCustomsRate_Pay.DataSource = dt;
}
else
{
dgvcmbCustomsRate_Pay.DisplayMember = "CustomsRate";
dgvcmbCustomsRate_Pay.ValueMember = "CustomsRate";
dgvcmbCustomsRate_Pay.DataSource = dt;
}
}
/// <summary>
/// 为税率赋值
/// </summary>
private void CreateCustomsRateR()
{
DataTable dt = Basis_CustomsRateManager.Basis_CustomsRateDataTable;
if (dt.Columns.Contains("Rate"))
{
dt.Columns["Rate"].ColumnName = "CustomsRate";
dgvcboCustomsRate_R.DisplayMember = "CustomsRate";
dgvcboCustomsRate_R.ValueMember = "CustomsRate";
dgvcboCustomsRate_R.DataSource = dt;
}
else
{
dgvcboCustomsRate_R.DisplayMember = "CustomsRate";
dgvcboCustomsRate_R.ValueMember = "CustomsRate";
dgvcboCustomsRate_R.DataSource = dt;
}
}
因为我需要获取combobox的值 所以我注册了一个事件
部分代码,因为两个dgv都一样/// <summary>
/// 自定义事件,为Edit的cbo添加事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboEdit_P_SelectedIndexChanged(object sender, EventArgs e)
{
int index = dgvCost_FeeInfo_Pay.CurrentCell.RowIndex;
string money = Convert.ToString(dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtShouldMoney_P"].Value);
ComboBox cbo = sender as ComboBox;
if (CommonMethodHelper.ToDecimal(cbo.Text) > 0)
{ if (!string.IsNullOrEmpty(money))
{
decimal m = Convert.ToDecimal(money); dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtCustomsMoney_P"].Value = m * Convert.ToDecimal(cbo.Text);
}
}
else if (CommonMethodHelper.ToDecimal(cbo.Text) == 0)
{
//dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtCustomsMoney_P"].Value = CommonMethodHelper.ToDecimal( money);
dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtCustomsMoney_P"].Value = 0;
}
}
下面是我绑定combobox的代码private void CreateCustomsRateP()
{
DataTable dt = Basis_CustomsRateManager.Basis_CustomsRateDataTable;
if (dt.Columns.Contains("Rate"))
{
dt.Columns["Rate"].ColumnName = "CustomsRate";
dgvcmbCustomsRate_Pay.DisplayMember = "CustomsRate";
dgvcmbCustomsRate_Pay.ValueMember = "CustomsRate";
dgvcmbCustomsRate_Pay.DataSource = dt;
}
else
{
dgvcmbCustomsRate_Pay.DisplayMember = "CustomsRate";
dgvcmbCustomsRate_Pay.ValueMember = "CustomsRate";
dgvcmbCustomsRate_Pay.DataSource = dt;
}
}
/// <summary>
/// 为税率赋值
/// </summary>
private void CreateCustomsRateR()
{
DataTable dt = Basis_CustomsRateManager.Basis_CustomsRateDataTable;
if (dt.Columns.Contains("Rate"))
{
dt.Columns["Rate"].ColumnName = "CustomsRate";
dgvcboCustomsRate_R.DisplayMember = "CustomsRate";
dgvcboCustomsRate_R.ValueMember = "CustomsRate";
dgvcboCustomsRate_R.DataSource = dt;
}
else
{
dgvcboCustomsRate_R.DisplayMember = "CustomsRate";
dgvcboCustomsRate_R.ValueMember = "CustomsRate";
dgvcboCustomsRate_R.DataSource = dt;
}
}
因为我需要获取combobox的值 所以我注册了一个事件
部分代码,因为两个dgv都一样/// <summary>
/// 自定义事件,为Edit的cbo添加事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboEdit_P_SelectedIndexChanged(object sender, EventArgs e)
{
int index = dgvCost_FeeInfo_Pay.CurrentCell.RowIndex;
string money = Convert.ToString(dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtShouldMoney_P"].Value);
ComboBox cbo = sender as ComboBox;
if (CommonMethodHelper.ToDecimal(cbo.Text) > 0)
{ if (!string.IsNullOrEmpty(money))
{
decimal m = Convert.ToDecimal(money); dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtCustomsMoney_P"].Value = m * Convert.ToDecimal(cbo.Text);
}
}
else if (CommonMethodHelper.ToDecimal(cbo.Text) == 0)
{
//dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtCustomsMoney_P"].Value = CommonMethodHelper.ToDecimal( money);
dgvCost_FeeInfo_Pay.Rows[index].Cells["dgvtxtCustomsMoney_P"].Value = 0;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货