在c#中保存datagridview中的数据
Posted
技术标签:
【中文标题】在c#中保存datagridview中的数据【英文标题】:save data from datagridview in c # 【发布时间】:2018-11-19 08:28:16 【问题描述】:1 我在存储数据时遇到问题。 在此之前,我有已经显示在 DataGridview 中的数据,我想以 * txt 的形式存储来自 DataGridview 的数据。我已尝试保存数据,但仅存储了一个数据而不是全部。
在这里,我向您展示我的代码。希望可以有人帮帮我?非常感谢之前
row.Cells["colProjection"].Value = string.Join("\t", feature.Select(f => Math.Abs(f / 30).ToString("N3")));
TextWriter writer = new StreamWriter(@"C:\Users\LENOVO\Desktop\OKE.txt");
writer.Write(row.Cells["colProjection"].Value);
writer.WriteLine("");
writer.Close();
【问题讨论】:
为什么您将整个表达式写入该单元格(使用制表符),然后尝试从该单元格写入文本文件?只需将您的表达式写入文本文件即可。 你保存一个单元格你就有一个单元格。明显的。如果您有更多单元格,则需要将它们全部写入。如果你想在一个文本文件中添加一个行分隔符,也许是 '\v':如果你有更多行,同样适用。也许使用\r
来分隔行,或者像现在这样使用换行符序列。
因为我的datagridview格式就是这样。有一列用于显示图像,有一列用于显示值。我会将值保存在显示该值的列中。 @SeM
【参考方案1】:
您应该获取所有行数据,您可以使用for
循环来执行此操作,如下所示:
StringBuilder sr=new StringBuilder();
for (int i=0 ;i>=mygrid.Rows.Count;i++)
sr.AppendLine(mygrid.Rows[i].Cells["colProjection"].Text);
System.IO.File.WriteAllText("D:\output.txt",sr.ToString());
更新:
private void btnFeature_Click(object sender, EventArgs e)
if (pca == null)
MessageBox.Show("Please compute the analysis first!");
return;
ImageToArray converter = new ImageToArray(min: 0, max: 1);
int rows = dataGridView3.Rows.Count;
double[][] inputs = new double[rows][];
double[][] features = new double[rows][];
int[] outputs = new int[rows];
int index = 0;
StringBuilder sr=new StringBuilder();
foreach (DataGridViewRow row in dataGridView3.Rows)
Bitmap image = row.Cells["colFace2"].Value as Bitmap;
int label = (int)row.Cells["colLabel2"].Value;
double[] input;
converter.Convert(image, out input);
double[] feature = pca.Transform(input);
row.Cells["colProjection"].Value = string.Join("\t", feature.Select(f => Math.Abs(f / 30).ToString("N3")));
// TextWriter writer = new StreamWriter(@"C:\Users\LENOVO\Desktop\OKE.txt");
/*for (int i = 0; i < dataGridView3.RowCount; i++)
writer.Write();
*/
sr.Append(row.Cells["colProjection"].Text);// Or .Value
row.Tag = feature;
inputs[index] = input;
features[index] = feature;
outputs[index] = label;
index++;
System.IO.File.WriteAllText("C:\Users\LENOVO\Desktop\OKE.txt",sr.ToString());
【讨论】:
对不起,我试过你的代码。但是,该程序仍然无法运行,并且错误出现在代码“row [i]”中。我收到一个错误“无法使用 [] 将索引应用到表达式以键入 'datagridview'”。那么,我该怎么办? 它只是一个示例,使用mygrid.Rows[i].Cells["colProjection"].Value;
而不是row[i].Cells["colProjection"].Value
@IrmaDewita 我已经更新了答案。另请在我之前的评论中将 .Value 替换为 .Text。
是的,我明白了,我已经成功地使用循环功能将数据完全存储起来了。但是当我看到txt中的数据时,第一行中的值与第二行相同,依此类推。我应该怎么做才能克服这个问题?【参考方案2】:
这是我用来存储数据的代码。 但是存储的数据仍然有错误。因为存储的数据是最后一行数据,而不是从第一行到最后一行的数据。
private void btnFeature_Click(object sender, EventArgs e)
if (pca == null)
MessageBox.Show("Please compute the analysis first!");
return;
ImageToArray converter = new ImageToArray(min: 0, max: 1);
int rows = dataGridView3.Rows.Count;
double[][] inputs = new double[rows][];
double[][] features = new double[rows][];
int[] outputs = new int[rows];
int index = 0;
foreach (DataGridViewRow row in dataGridView3.Rows)
Bitmap image = row.Cells["colFace2"].Value as Bitmap;
int label = (int)row.Cells["colLabel2"].Value;
double[] input;
converter.Convert(image, out input);
double[] feature = pca.Transform(input);
row.Cells["colProjection"].Value = string.Join("\t", feature.Select(f => Math.Abs(f / 30).ToString("N3")));
TextWriter writer = new StreamWriter(@"C:\Users\LENOVO\Desktop\OKE.txt");
for (int i = 0; i < dataGridView3.RowCount; i++)
writer.Write(row.Cells["colProjection"].Value + "\t");
writer.WriteLine("");
writer.Close();
row.Tag = feature;
inputs[index] = input;
features[index] = feature;
outputs[index] = label;
index++;
【讨论】:
row.Cells["colProjection"].Value = string.Join("\t", feature.Select(f => Math.Abs(f / 30).ToString("N3")));
这个代码行是做什么的?
用于以数组形式在每一行的“colprojetion”中显示值的代码。
对不起,但需要更多说明。 row
这是指什么?为什么不使用当前行索引i
来检索循环中的所有行(正如我在上一个答案中解释的那样)?
抱歉,我不明白这是什么意思。但我已经更新了我使用的完整代码。我希望你能帮我解决我的问题。谢谢@MKH
嗯,您正试图通过ForeEach
循环获取所有行,但为什么要在其中使用for
循环?这个for
循环重复从foreach
检索到的每一行.RowCount
次,然后将其保存到文件中。另外,请在 foreach
结束后放置您的 Save & Close Writer,因为这就是为什么您在输出文件中只保存一条记录(在这种情况下为最后一行)n
次。以上是关于在c#中保存datagridview中的数据的主要内容,如果未能解决你的问题,请参考以下文章
C# 如何通过textbox修改dataGridView中的值单击button并保存到数据库中
将datagridview中的数据集存储到新的访问数据库文件c#
使用 c# 编辑 DataGridview 并将其保存在数据库表中