winform DataGridView控件绑定数据源进行显示,后通过对话框对数据进行修改,修改完成后数据不显示,只有手动最小化窗口或用其他窗口遮盖DataGridView后显示,试了很多方法都没行通,.NET的强制刷新也不管用,难道要调用windows API 来强制刷新吗? 代码如下:
if (dvSales.SelectedRows.Count == 0)
{
return;
} foreach (DataGridViewRow row in dvSales.SelectedRows)
{
SaleEntity s = row.DataBoundItem as SaleEntity;
CommoditySaleForm dlg = new CommoditySaleForm(s);
dlg.Show();
} this.BindingContext[dvSales.DataSource].SuspendBinding();
this.dvSales.DataSource = null;
dvSales.AutoGenerateColumns = false;
this.dvSales.DataSource = _saleEntities;
this.BindingContext[dvSales.DataSource].ResumeBinding();同样类似的方法,是在文本框回车事件时改变数据源的值就没问题,,看代码中那个Count++:private void txtCode_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar != '\r')
{
return;
} string code = txtCode.Text.Trim(); if (code == string.Empty)
{
return;
} SaleEntity s;
s = _saleEntities.FirstOrDefault(n => n.CommodityID == code); //同样商品多件销售,只需增加数量
if (s != null)
{
s.Count++;
txtCode.Text = "";
}
else
{
s = GetCommodity(code);
s.Salesman = 1;
s.Date = dtpDate.Value.ToString("yyyy-MM-dd"); if (s != null)
{
_saleEntities.Add(s);
} txtCode.Text = "";
} this.BindingContext[dvSales.DataSource].SuspendBinding();
this.dvSales.DataSource = null;
dvSales.AutoGenerateColumns = false;
this.dvSales.DataSource = _saleEntities;
this.BindingContext[dvSales.DataSource].ResumeBinding(); txtCountPrice.Text = _saleEntities.Sum(n => n.CountPrice).ToString();
e.Handled = true;
}DataGridView
if (dvSales.SelectedRows.Count == 0)
{
return;
} foreach (DataGridViewRow row in dvSales.SelectedRows)
{
SaleEntity s = row.DataBoundItem as SaleEntity;
CommoditySaleForm dlg = new CommoditySaleForm(s);
dlg.Show();
} this.BindingContext[dvSales.DataSource].SuspendBinding();
this.dvSales.DataSource = null;
dvSales.AutoGenerateColumns = false;
this.dvSales.DataSource = _saleEntities;
this.BindingContext[dvSales.DataSource].ResumeBinding();同样类似的方法,是在文本框回车事件时改变数据源的值就没问题,,看代码中那个Count++:private void txtCode_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar != '\r')
{
return;
} string code = txtCode.Text.Trim(); if (code == string.Empty)
{
return;
} SaleEntity s;
s = _saleEntities.FirstOrDefault(n => n.CommodityID == code); //同样商品多件销售,只需增加数量
if (s != null)
{
s.Count++;
txtCode.Text = "";
}
else
{
s = GetCommodity(code);
s.Salesman = 1;
s.Date = dtpDate.Value.ToString("yyyy-MM-dd"); if (s != null)
{
_saleEntities.Add(s);
} txtCode.Text = "";
} this.BindingContext[dvSales.DataSource].SuspendBinding();
this.dvSales.DataSource = null;
dvSales.AutoGenerateColumns = false;
this.dvSales.DataSource = _saleEntities;
this.BindingContext[dvSales.DataSource].ResumeBinding(); txtCountPrice.Text = _saleEntities.Sum(n => n.CountPrice).ToString();
e.Handled = true;
}DataGridView
问题已解决,实体对象必须实现这个接口,并且使用BindingLis<T>作为数据载体