日期:2014-05-18  浏览次数:21087 次

C# dgv 问题
我自己定义了一个结构体:
  struct goods  
  {
  public int i_GoodsID;
  [MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
  public char[] barcode;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=40)]
public char[] name;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]
public char[] dw;  
  public float f_OriPrice;  
   
  };

通过 dgv将数据保存到txt自定义文件中:

private void button1_Click(object sender, EventArgs e)
  {
  goods[] good=new goods[dataGridView1.Rows.Count];
   
   
  string filename = "crj.dat";
   
  StreamWriter sw = new StreamWriter(filename,true,Encoding.Default);
  string Text = "";
   
  if (!File.Exists(filename))
  {
  MessageBox.Show("创建失败","错误",MessageBoxButtons.OK);
  }
   
  good[i].i_GoodsID = int.Parse((string)this.dataGridView1.Rows[i].Cells[1].Value);
  //如何将通过datagridview1获取的string 写入char[]最终通过btn保存到txt文本?
//
//
  good[i].f_OriPrice=float.parse((string)this.dataGridView1.Rows[i].Cells[5].Value);
  Text = good[i].i_GoodsID + "," + good[i].barcode+ "," + good[i].name+""+good[i].dw+""+good[i].f_OriPrice;
  sw.WriteLine(Text);
  }
  if (Text.Length > 0)
  {
  MessageBox.Show("OK!","提示");
  }
  sw.Flush();
  sw.Close();

哪位高手帮我补充下,空余的三行代码?小弟我不会写这三行

------解决方案--------------------
[code=C#][/code]序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,
或者将这种对象从一个地方传输到另一个地方。
.NET框架提供了两种串行化的方式:
1、是使用BinaryFormatter进行串行化;
2、使用SoapFormatter进行串行化;
3、使用XmlSerializer进行串行化。第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,
而第二种将数据流格式化为XML存储;第三种其实和第二种差不多也是XML的格式存储,
只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。
可以使用[Serializable]属性将类标志为可序列化的。如果某个类的元素不想被序列化,
1、2可以使用[NonSerialized]属性来标志,
2、可以使用[XmlIgnore]来标志。

1、使用BinaryFormatter进行串行化
下面是一个可串行化的类:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
/// <summary>
/// ClassToSerialize 的摘要说明
/// </summary>
[Serializable]
public class ClassToSerialize
{
public int id = 100;
public string name = "Name";
[NonSerialized]
public string Sex = "男";
}


下面是串行化和反串行化的方法:

public void SerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fileStream, c);
fileStream.Close();
}
public void DeSerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
c.Sex = "kkkk";
FileStream fileStream = new FileStream(&qu