DataTable的行和列操作

dell0923 2009-03-26 11:13:09
我有一个DataGridView,可以对他进行行和列的删除追加操作.他绑定了一个DataSource是一个DataTable.当我给这个DataGridView追加一些行后(是在DataGridView的数据源追加DataRow,代码如下):

DataRow drDisplay = _displayContent.NewRow();
for (int i = 0; i < _displayContent.Columns.Count; i++)
{
drDisplay[i] = string.Empty;
}
_displayContent.Rows.Add(drDisplay);


然后会删除行,如原来有5行,我追加了两行在最后,现在我删除了第6行:

_displayContent.Rows.RemoveAt(5);


这时候去的第6行(删除前的第7行)的某个单元格的Value时,出现Exception:

this.TextBox1.Text = _displayContent.Rows[5][**].ToString();


Exception内容:
2009-03-19 11:08:36,047 INFO - 此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据

请各位大侠帮忙.

另:删除行我试过Rows[index].Delete();仍然是这个错误.
...全文
428 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
论文MVP网 2009-03-27
  • 打赏
  • 举报
回复
修改后再绑定一次,你没绑定所以没刷新
ljsheng 2009-03-27
  • 打赏
  • 举报
回复
dfsdfsd
wuyq11 2009-03-27
  • 打赏
  • 举报
回复
删除数据后,要重新绑定到datagridview,并判断是否为null
zhoulehua 2009-03-27
  • 打赏
  • 举报
回复
是的,重新绑定
路人乙e 2009-03-27
  • 打赏
  • 举报
回复
if(DGV.SelectionChanged==null)
YSEE 2009-03-27
  • 打赏
  • 举报
回复
用COPY吧。循来循去。就是个处理好的结果COPY
Luck_cl 2009-03-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cbgn 的回复:]
我的成功呀
DataTable dt = new DataTable();
private void Form6_Load(object sender, EventArgs e)
{
dt.Columns.Add("aa", typeof(int));
dt.Columns.Add("bb", typeof(int));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = 20;
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();…
[/Quote]
UP
guzhonghua 2009-03-27
  • 打赏
  • 举报
回复
首先我回复一下说上面这句话我不是冲着楼主说的。
dt.Rows.RemoveAt(5);
dt.Rows[5].Delete();
我来说说这两个方法的使用,RemoveAt这个方法是不管数据是什么样的状态,他都会把这个索引指定的数据给删掉,是从集合里彻底的删掉,除非这个数据不存在。
Delete()方法就高级了,他是根据数据的状态的不同,执行的东西也是不同的。比如说,如果你是用NewRow()方法添加了一个行数据,并把这条数据加到了table中(此时的数据状态是Added)后。接着直接就调用Delete()方法,这个时候他和RemoveAt是一样的效果。
但是如果你添加了数据后,对数据进行了保存后是其他的操作,或是调用了AcceptChange 或RejectChange方法。table中的数据的状态就会发生变化。如果是你保存过之后或是从数据库插过来对数据还没进行任何的操作,就删某一条数据的话,这个时候其实他没有真正的去删掉这个数据。而是把这条数据的状态改为了Deleted了。当你操作数据状态为Deleted的数据的时候就会发生你说的那种错误。
至于数据状态的知识,你自己要再看看!

zhensoft163 2009-03-27
  • 打赏
  • 举报
回复
试试在删除之后添加
AcceptChange()进行提交;

还有就是最好在绑定DataGridView信息绑定之前对其进行操作。
guzhonghua 2009-03-27
  • 打赏
  • 举报
回复
哎 现在的程序员都怎么了啊 我无语了 太肤浅了!
dell0923 2009-03-26
  • 打赏
  • 举报
回复
应该是这样.
这句代码写在DGV_SelectionChanged事件里,画面的业务有些复杂,DGV.SelectionChanged -= += 使用的比较多.导致有些本来不应该触发这个事件的地方触发,才有那个错误.

现在想问:怎么让DGV.SelectionChanged最多只有一个方法,就是当DGV.SelectionChanged不为空时,不需要再注册事件.我再理理逻辑应该就没问题了

[Quote=引用 9 楼 sq_zhuyi 的回复:]
removeat没问题
就看 this.TextBox1.Text = _displayContent.Rows[5][**].ToString(); 这句代码的位置了
[/Quote]
路人乙e 2009-03-26
  • 打赏
  • 举报
回复
removeat没问题
就看 this.TextBox1.Text = _displayContent.Rows[5][**].ToString(); 这句代码的位置了
justindreams 2009-03-26
  • 打赏
  • 举报
回复
DataTable.AcceptChange
雪狼online 2009-03-26
  • 打赏
  • 举报
回复
3,5楼正解,删除后要习惯重邦
cbgn 2009-03-26
  • 打赏
  • 举报
回复
我的成功呀
DataTable dt = new DataTable();
private void Form6_Load(object sender, EventArgs e)
{
dt.Columns.Add("aa", typeof(int));
dt.Columns.Add("bb", typeof(int));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = 20;
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1[0] = 1;
dr1[1] = 20;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2[0] = 2;
dr2[1] = 20;
dt.Rows.Add(dr2);

dataGridView1.DataSource = dt;
}

private void add_Click(object sender, EventArgs e)
{
DataRow drDisplay = dt.NewRow();
for (int i = 0; i < dt.Columns.Count; i++)
{
drDisplay[i] = 0;
}
dt.Rows.Add(drDisplay);

}

private void button4_Click(object sender, EventArgs e)
{
dt.Rows.RemoveAt(3);

}

itcrazyman 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dell0923 的回复:]
问题和DataGridView没有太大的关系,而且,如果指定了DataGridView.DataSource = datatable后,编辑datatable的行,DataGridView会自动改变的.

引用 1 楼 surlew 的回复:
你在修改你的DataTable后DataGridView有没重新绑定过
[/Quote]
正解
dell0923 2009-03-26
  • 打赏
  • 举报
回复
我并没有用For循环啊,我知道我要取第几行的数据.

[Quote=引用 2 楼 outou 的回复:]
在删除DataGridView行的时候,FOR最好是从最后一行算起,这样就不会有问题了。
[/Quote]
dell0923 2009-03-26
  • 打赏
  • 举报
回复
问题和DataGridView没有太大的关系,而且,如果指定了DataGridView.DataSource = datatable后,编辑datatable的行,DataGridView会自动改变的.

[Quote=引用 1 楼 surlew 的回复:]
你在修改你的DataTable后DataGridView有没重新绑定过
[/Quote]
outou 2009-03-26
  • 打赏
  • 举报
回复
在删除DataGridView行的时候,FOR最好是从最后一行算起,这样就不会有问题了。
surlew 2009-03-26
  • 打赏
  • 举报
回复
你在修改你的DataTable后DataGridView有没重新绑定过

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧