zil*_*ods 31 c# datagrid runtime dataset
对于这可能涉及的人,我已经搜索了相当多的时间,以便摆脱这个错误
"无法通过行访问已删除的行信息"
我知道,一旦从数据表中删除了一行,就无法以典型的方式访问它,这就是我收到此错误的原因.最大的问题是我不知道该怎么做才能得到我想要的结果,我将在下面概述.
基本上,当删除"dg1"中的行时,它下面的行取代已删除的行(显然),从而继承已删除的行索引.此方法的目的是替换和重置行索引(通过从数据集中的相应值中抓取它),该索引将删除的行放置并且因此索引值.
现在我只是使用标签(lblText)来尝试从进程获得响应,但是当最后一个嵌套的if语句尝试比较值时崩溃.
这是代码:
void dg1_Click(object sender, EventArgs e)
{
rowIndex = dg1.CurrentRow.Index; //gets the current rows
string value = Convert.ToString(dg1.Rows[rowIndex].Cells[0].Value);
if (ds.Tables[0].Rows[rowIndex].RowState.ToString() == "Deleted")
{
for (int i = 0; i < dg1.Rows.Count; i++)
{
if (Convert.ToString(ds.Tables[0].Rows[i][0].ToString()) == value)
// ^ **where the error is occurring**
{
lblTest.Text = "Aha!";
//when working, will place index of compared dataset value into rowState, which is displaying the current index of the row I am focussed on in 'dg1'
}
}
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢你的帮助,我真的做了搜索,如果通过一个简单的谷歌搜索很容易弄明白,那么就让我自己重复地讨厌我,因为我试试.
Gav*_*vin 45
您还可以使用DataSet的AcceptChanges()方法完全应用删除.
ds.Tables[0].Rows[0].Delete();
ds.AcceptChanges();
Run Code Online (Sandbox Code Playgroud)
fir*_*fly 36
内部if语句中数据列的当前值将不可用于已删除的行.要检索已删除行的值,请指定您想要原始值.这应该可以解决您的错误:
if (Convert.ToString(ds.Tables[0].Rows[i][0, DataRowVersion.Original].ToString()) == value)
Run Code Online (Sandbox Code Playgroud)
Tip*_*ipx 14
在"崩溃if"中,您可以在访问其值之前检查该行是否已删除:
if (ds.Tables[0].Rows[i].RowState != DataRowState.Deleted &&
Convert.ToString(ds.Tables[0].Rows[i][0].ToString()) == value)
{
// blaaaaa
}
Run Code Online (Sandbox Code Playgroud)
另外,我不确定为什么你要ToString()RowState而不是将它与DataRowState.Deleted进行比较.
归档时间: |
|
查看次数: |
46133 次 |
最近记录: |