没有从 dataGridView 获取的最后输入值
There is no last entered value taken from 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("");
}
}
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("");
}
}