如何把winform中的控件的所有数据存储起来 我有一个winform里面有很多静态的datagridview控件,没有绑定数据,当作电子表格用的.我如何把当前输入到datagridview控件中的数据以某种设计的格式(如后缀名为.csdn)存储起来,当我打开后缀为.csdn的文件时,winform界面显示的是存储时的状态,datagridview的数据为存储时的数据,分不够我还会加的.请教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得存储在xml中更方便操作楼主可以在xml中定义几个重要的区分节点,比如form名称,control名称,对应的列名称等关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。下次窗体开启时,在Load事件中读取xml中存储的数据显示就好了。 关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。对应节点中... 一般情况,你可将datagridview的endedit事件中动态将数据保存在一个表(datatable)中然后使用表的WriteXml方法写到文件,在需要读出时使用表的ReadXml方法读出来,再直接绑定到datagridview就可以了 先关内容保存xml文档处理方便,不用数据库了,数据量又不大少量使用xml方便,大量的数据处理就要用数据库了 我的是winform程序,楼上各位兄弟说的是winform的程序么?本人比较菜,最好给个详细的例子(比如单个的datagriview表格为20*20的数据存储),或是相关的资料网址.谢谢. 这种情况采用备忘录模式比较方便,你可以到网上搜索备忘录的资料,至于具体的实现技术,你可以控件中的数据保存在INI文件中,或保存在注册表中,或保存在数据库,看你的选择了 有这方面的例子代码么?看了一些文章http://blog.163.com/fengzijun_2005/blog/static/332290532008321504899/,都是对自己定义的类的里面的字段进行序列化.我现在想做到的是,在一个form1中,有一个datagridview控件,2个textbox控件,两个button控件,我在datagridview控件,textbox控件输入数据后,点击存储的button,就把当前控件的状态存储起来为一个自定的后缀名如.csdn,用打开button打开刚刚存储的文件.csdn文件,form1就恢复到存储时的状态.在form1类中,都是控件,也没有自己的字段变量,我怎么把form1中的控件序列化? 我现在就是这么想的,但是一个datagridview控件中cell的数据提取,以及每个cell的宽度,背景颜色等的提取量还是很大的.c#中没有能把当前的控件的各种状态参数(如输入的数据,宽度,颜色等数据)以某种简单方式存储起来,然后可以调用的方法么?我怎么把当前的datagridview中的输入数据提取成DataTabale的数据格式?论坛上有人提到这个问题,没有解决.DataTable dt = (DataTable)dataGridView1.DataSource;//不能数据传到dt中 是的,如果保存类型比较复杂繁多的话,需要动态保存每一个细节的话,就需要自己创建不同的节点,可以参看我1楼的描述。但是你的窗体运行时,每个cell的宽度就是对应的列宽而已,背景色难道楼主还做了自动设置功能,否则这个信息不需要保存。如果楼主只是保存datagridview中数据的话,的确是简单很多,也不需要自己创建其它节点,可以参看我下面的一个简单过程: private void SetDataGridView() { DataSet ds = new DataSet(); DataTable dt = new DataTable(); DataRow dtrow; //创建对应你Datagridview中列的Name dt.Columns.Add("ID"); dt.Columns.Add("Name"); dt.Columns.Add("Sex"); foreach (DataGridViewRow row in dataGridView1.Rows) { dtrow = dt.NewRow(); dtrow["ID"] = row.Cells["ID"].Value; dtrow["Name"] = row.Cells["Name"].Value; dtrow["Sex"] = row.Cells["Sex"].Value; dt.Rows.Add(dtrow); } ds.Tables.Add(dt); ds.WriteXml(@"D:\DataGridView.xml"); }可以在窗体关闭时,FormClosing事件中执行此方法 private void GetDataGridView() { DataSet ds = new DataSet(); ds.ReadXml(@"D:\DataGridView.xml"); //如果 dataGridView1.Columns.Clear(); dataGridView1.DataSource = ds.Tables[0]; }在Form_Load事件中执行此方法填充数据ps 当然我这里的路径都是写死的,楼主这里可以从配置文件中读取或其他方式 谢谢paulin.数据存储的都好处理,主要是我还对datagridview表格中的背景色以及.Style.Alignment等做了设置,这样存储起来手动写的细节太多了.看来是没什么好办法了,只能用笨方法一点点写了.迟点给分,看看有没有人能给个更简单的方法或是思路. 给个思路看看合适不: 自定义一个可序列化的类,其中包含两个字段,格式字段,数据字段;序列化这个实例,下子加载窗体反序列化得到这些实例赋值上就应该可以了吧? [Serializable] public class MyData { public DataGridView MyView; //可以是任何类型,比如View的DataTable格式的数据等 public Object MyData; } Fun: SaveData(MyData data) { BinSerMyData....->二进制方式序列化数据存储 } Fun:ReadData(out MyData data) { BinDeSer-->MyData } 一定是二进制序列化,XML序列化会受到一些限制; 大家好,谁能帮我解决个问题,关于输出显示的!谢谢。。 如何实现企业内部点对点的通讯 88 WCF 大数据量序列化占用内存高的问题 菜鸟想问问如何截取字符串??? .net上传限制问题,在线等~ 怎么使用正则表达式替换出这个字符串 求解 一个类型转换的问题 .net做的项目怎么找包???100 将截断字符串或二进制数据。语句已终止 如何判断是那个字段 跪求关于WinForm中DataGridView控件按照条件分组的问题,超难!!!!! 单机程序数据存储问题
楼主可以在xml中定义几个重要的区分节点,比如form名称,control名称,对应的列名称等
关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。
下次窗体开启时,在Load事件中读取xml中存储的数据显示就好了。
对应节点中...
然后使用表的WriteXml方法写到文件,在需要读出时使用表的ReadXml方法读出来,再直接绑定到datagridview就可以了
处理方便,不用数据库了,数据量又不大
少量使用xml方便,大量的数据处理就要用数据库了
我怎么把当前的datagridview中的输入数据提取成DataTabale的数据格式?论坛上有人提到这个问题,没有解决.
DataTable dt = (DataTable)dataGridView1.DataSource;//不能数据传到dt中
就需要自己创建不同的节点,可以参看我1楼的描述。但是你的窗体运行时,每个cell的宽度就是对应的列宽而已,背景色难道楼主还做了自动设置功能,否则这个信息不需要保存。如果楼主只是保存datagridview中数据的话,的确是简单很多,也不需要自己创建其它节点,可以参看我下面的一个简单过程: private void SetDataGridView()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dtrow;
//创建对应你Datagridview中列的Name
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Sex"); foreach (DataGridViewRow row in dataGridView1.Rows)
{
dtrow = dt.NewRow();
dtrow["ID"] = row.Cells["ID"].Value;
dtrow["Name"] = row.Cells["Name"].Value;
dtrow["Sex"] = row.Cells["Sex"].Value; dt.Rows.Add(dtrow);
} ds.Tables.Add(dt); ds.WriteXml(@"D:\DataGridView.xml");
}可以在窗体关闭时,FormClosing事件中执行此方法 private void GetDataGridView()
{ DataSet ds = new DataSet();
ds.ReadXml(@"D:\DataGridView.xml");
//如果
dataGridView1.Columns.Clear(); dataGridView1.DataSource = ds.Tables[0];
}在Form_Load事件中执行此方法填充数据ps 当然我这里的路径都是写死的,楼主这里可以从配置文件中读取或其他方式
public class MyData
{
public DataGridView MyView;
//可以是任何类型,比如View的DataTable格式的数据等
public Object MyData;
} Fun: SaveData(MyData data)
{
BinSerMyData....->二进制方式序列化数据存储
} Fun:ReadData(out MyData data)
{
BinDeSer-->MyData
}