(急)c#中datagridview表中删除行后重新加载后删除的行会变成空白行。数据是没有了,空白行是啥情况?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(急)c#中datagridview表中删除行后重新加载后删除的行会变成空白行。数据是没有了,空白行是啥情况?相关的知识,希望对你有一定的参考价值。

删除行前

删除行后从新加载

我回答过你上次提的问题,你这是从XML文件中解析出来数据加载到DataGridView中。
我给你的答案完全可以实现你的目的,不知道你有没有看。

既然是空白行,肯定是加载时赋值问题。需要跟踪代码看看赋值时是否出错。

也有可能你删除了行,但在XML文件时没有删除节点,解析加载时解析出来节点的InnerText为空。追答

如果你只删属性,student节点不删,在解析加载时就需要做判断,如果节点的属性为空,则不加载此节点。
如果你直接删除该student节点,那就简单了,删除完后再调用加载方法,即刷新datagridview即可。

直接删除student节点
(我的XML中用的是innertext,你需要改成你的格式,即attribute)
for (int i = 0; i < dgvXML.SelectedRows.Count; i++)

string id = dgvXML.SelectedRows[i].Cells[0].Value.ToString();
XmlDocument doc = new XmlDocument();
doc.Load(this.txtPath.Text);
XmlNodeList nod = doc.DocumentElement.ChildNodes;
XmlNode root = doc.DocumentElement;//定位根节点,以从根点删除需要删除的节点
foreach (XmlNode peo in nod) //循环student节点,找到要删除的节点

if (XmlNode.Equals(peo.SelectSingleNode("ID").InnerText, id)) //以ID为索引,找到要删除的节点

root.RemoveChild(peo);//从根节点删除该ID的PERSON
doc.Save(this.txtPath.Text);


参考技术A 你是怎么加载啊啊?唉,贴两张图片有是什么意思呢?你想告诉我们你的表格第一行没有了么?,提问要抓住重点啊!!
我看到你的问题我更急啊!!追问

我代码字数有限制,刚申请的号,下面有那个xml的代码,怎么完全删除我那个代码只能删除里面的属性,把他们都删除了怎么写啊,请大神指点,

(百度提醒:对同一回答追问超过3条后每次消耗5个财富值,我没财富值了)

追答

所以啊,要提关键的,我看楼上的 【白天1030】这个不是说帮你搞定了撒,你可以发私信撒!!

参考技术B 代码贴上来追问

追答

删除之后Student.xml你打开看下,是否还存在。

C# - 删除行后如何刷新 DataGridView

【中文标题】C# - 删除行后如何刷新 DataGridView【英文标题】:C# - how do I refresh DataGridView after removing rows 【发布时间】:2010-12-06 08:14:19 【问题描述】:

在我的代码中,我需要在重复间隔后从 DataGridView 中删除行,因此我在计时器到期时调用以下函数:

private void removeRows(DataGridView dgv) 

    foreach (DataGridViewRow row in dgv.Rows)
    
        // if some condition holds
        dgv.Remove(row);                
    
    dgv.Refresh();


我知道这些行已成功从 DataGridView 中删除,但无论出于何种原因它们仍保留在显示中。关于我可能做错的任何提示?

【问题讨论】:

【参考方案1】:

不需要重新绑定数据网格吗?

dgrv.Datasource = [whatever data source];
dgrv.DataBind();

?

【讨论】:

DataGridView 是一个 winforms 控件,因此不需要数据绑定。如果是 ASP .NET,在他的示例中删除行不会影响数据源。因此,这样做会使 gridview 在删除它们之前显示相同的数据。【参考方案2】:

有时刷新数据网格视图是不够的,它的包含父视图也应该刷新。

试试这个:

dgv.Refresh(); // Make sure this comes first
dgv.Parent.Refresh(); // Make sure this comes second

您还可以编辑源并将新数据源附加到控件。

【讨论】:

【参考方案3】:

如果您已将数据网格绑定到 Observable Collection(如果没有,那么您应该),那么您将需要实现 INotifyCollectionChanged 接口,以便侦听器收到动态更改的通知,例如添加和删除项目或整个列表时刷新。

HTH

【讨论】:

对不起,不熟悉(c#新手)。你能扩大一点吗?谢谢。 您好,如果您编辑帖子并添加一些有关如何填充数据源的信息,那么我可以为您提供一些指导。干杯。【参考方案4】:

如果我的理解正确,您想从 DGV 中删除用户选择的行。

    使用 DGV 的 DataGridViewRowCollection 而不是 DataTable 的 DataRowCollection。 DataGridViewRow 具有 Selected 属性,该属性指示是否选择了一行。

    一旦确定要删除一行,就可以使用 DataGridViewRowCollection 的 Remove 方法从网格中删除该项目,例如YerDataGridView.Rows.Remove(row)

    请注意,此时,虽然该项目已从 DGV 中删除,但仍未从 Access DB 中删除。您需要在 DataSet/DataTable 上调用 TableAdapter Update 方法以将删除提交到数据库,例如YerTableAdapter.Update(YerDataSet)

我通常会在从 DGV 中删除所有要删除的项目后调用一次更新以提交更改。

【讨论】:

【参考方案5】:

这段代码可能很有用:

dataGridView.DataSource = null;
dataGridView.Update();
dataGridView.Refresh();
dataGridView.DataSource = SomeDataSource;

希望这会有所帮助。

【讨论】:

【参考方案6】:

如果是数据绑定网格,您应该使用绑定源本身而不是网格。

【讨论】:

【参考方案7】:

尝试从绑定源中删除实际项目。

【讨论】:

以上是关于(急)c#中datagridview表中删除行后重新加载后删除的行会变成空白行。数据是没有了,空白行是啥情况?的主要内容,如果未能解决你的问题,请参考以下文章

C#中DataTable删除行后 GrdData.Rows.Count行数没变,求解:

急!在datagridview中修改或增加数据,单击按钮能将写入的数据保存到数据库里?求C#源代码,谢谢交个朋友

C#里怎样清空DataGridview中的数据

winform c# Datagridview 选中行 急!!!

c# dataGridView对access数据库的增加 修改 删除

求用c#在dataGridView中动态添加列的方法