c# winform datagridview界面上的行删了,但datagridview数据源没有同步如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform datagridview界面上的行删了,但datagridview数据源没有同步如何解决相关的知识,希望对你有一定的参考价值。

现在只能把它由((DataTable)datagridview1.DataSource).Rows.RemoveAt(rowNo);
改在 datagridview1.Rows.RemoveAt(rowNo);
但这样做,对datagridview的操作有时会报错,也就是说,它的绑定的源和datagridview界面显示的会不同步,如何让它能同步起来:
(注意:A删除 DataGridView 中的行 但它绑定的 DataTable 没有删除,
但 反过来 B删除 它绑定的 DataTable 居然可以自动将DataGridView界面上的行也删除,这个就是它的一个特性了)但现在想A的也自动同步如何解决

这样一定会报错的,因为datagridview在绑定了数据源之后是不允许再直接对行或列进行删除、新增的操作,它会认为你在非法修改数据源。(一般这样的操作只适用于逐条去赋值的datagridview)
所以这里想要实现你想要的结果,只有去修改数据源,即(DataTable)datagridview1.DataSource,然后再重新绑定DataSource,即datagridview1.DataSource=((DataTable)datagridview1.DataSource).Rows.RemoveAt(rowNo);
参考技术A datagridview1.Rows.RemoveAt(rowNo);只是删除datagridview的一行,你没有写对应的删除绑定源的代码,当然两者不会同步。本回答被提问者和网友采纳 参考技术B datagridview1只是用来显示数据,你在这上面进行增删改等操作不会影响数据源DataTable,除非你在对datagridview1增加时增加代码,对数据源DataTable也增删改 参考技术C 有什么需求使你认为必须删界面而不是数据源?

C# winform DatagridView 的简单操作

数据显示操作:

dgBill.Columns[0].DataPropertyName = "key1";
dgBill.Columns[1].DataPropertyName = "key2";
dgBill.Columns[2].DataPropertyName = "key3";

DataTable dt = new DataTable();
dt.Columns.Add("key1", Type.GetType("System.String"));
dt.Columns.Add("key2", Type.GetType("System.String"));
dt.Columns.Add("key3", Type.GetType("System.String"));

DataRow dr = null;

dr = dt.NewRow();

dr["key1"] = "key1";
dr["key1"] =  "key2";
dr["key1"] = "key3";
dt.Rows.Add(dr);
this.dgBill.DataSource = dt;

选择一行数据:

//右键菜单事项
private void dg1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (e.RowIndex >= 0)
{
//若行已是选中状态就不再进行设置
dg1.ClearSelection();
dg1.Rows[e.RowIndex].Selected = true;

//设置当前行
dg1.CurrentCell = dg1.Rows[e.RowIndex].Cells[0];

//弹出操作菜单
contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
}
}
}

//选择菜单的时候,进行获取右键一行的数据

DataGridViewRow rowData = dgBill.CurrentRow;
if (rowData != null)
{
if (rowData.Cells["ID"].Value != null)
{

}
else
{
MessageBox.Show("数据转换异常", "提示", MessageBoxButtons.OK);
}
}

以上是关于c# winform datagridview界面上的行删了,但datagridview数据源没有同步如何解决的主要内容,如果未能解决你的问题,请参考以下文章

C# winform dataGridView批量数据修改

C# Winform DataGridView中实现二维表头

C# winform DataGridView刷新慢

C# winform datagridview 编辑状态的问题

如何实现c# winform DataGridView添加一行,添加数据后,保存到数据库

C# winform界面如何做出表格的样式