如何解决没有从dataGridView获取的最后输入的值
FileStream fs = new FileStream(@"file.txt",FileMode.Create);
StreamWriter streamwriter = new StreamWriter(fs);
try
{
for (int j = 0; j < dataGridView1.Rows.Count -1 ; j++)
{
for (i = 0; i < dataGridView1.Rows[j].Cells.Count; i++)
{
streamwriter.Write(dataGridView1.Rows[j].Cells[i].Value + "#");
}
streamwriter.WriteLine("\n");
}
streamwriter.Close();
fs.Close();
MessageBox.Show("File saved successfully!");
}
catch
{
MessageBox.Show("File save failed!");
}
此函数应将值从DataGridView
传输到文件中,但最后一个值不会不断写入。我意识到它会删除我输入的最后一个元素
应该是这样的:
Name1#Lastname1#Number1#Home1#
这是真实的结果:
Name2#Lastname2#Number2##
解决方法
问题在于循环遍历行,现在您的条件是
j < dataGridView1.Rows.Count -1
这意味着如果行数为10,则循环将通过索引0到8,并跳过索引9。
您应该将条件更改为
j < dataGridView1.Rows.Count
如果将DataGridView’s
属性AllowUsersToAddRows
设置为true
,则发布的代码将起作用。如果将其设置为false
,则发布的代码将丢失网格的最后一行。
此外,根据网格DataSource
,数据源本身可能不允许新行,也可能无法添加新行。在这种情况下,AllowUsersToAddRows
属性将变得无关紧要,但是无论哪种情况……发布的代码仍然会遗漏最后一行。
由于代码在技术上是正确的“ IF”,因此网格的AllowUsersToAddRows
属性设置为true
。而且,您的问题似乎是关于“缺少”的最后一行…我假设网格AllowUsersToAddRows
属性设置为false
或数据源不允许添加新行。
为避免此问题,我建议对行循环中的“新”行进行额外检查。如果在行循环中检查“新”行,则网格AllowUsersToAddRows
属性是true
还是false
都没关系。此外,在行和单元格之间使用foreach
循环可能使事情变得更容易,并且看起来像……
foreach (DataGridViewRow row in dataGridView1.Rows) {
if (!row.IsNewRow) {
foreach (DataGridViewCell cell in row.Cells) {
streamwriter.Write(cell.Value + "#");
}
streamwriter.WriteLine("");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。