我的vb.net程序里窗体上有很多文本框、下拉列表框、datagridview的数据需要保存,想保存到xml文件里去,请问如何处理?

ruan1978 2019-03-26 10:53:34
我的程序里,窗体上有很多控件,有文本框,有下拉列表框,也有datagridview,控件里输入的数据想保存到一个文件里,尝试过用txt文件。但是感觉管理不方便。因为控件上的数据在窗体载入时需要从文件一一对应读出,然后分别对应到控件里。这个控件的内容可能会改变,需要将更改的内容重新写入到文件里。
想着最后实现这样的效果,因为xml文件有节点和数据,我需要控件的内容和控件名称对应的写进去。控件对应的名字作为节点,控件里输入的内容写入到数据项,也为了管理方便。请问有什么办法?最多大概有几十项数据。
...全文
409 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
控件字段还可以加个”ctype"
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
代码还可以简捷些,在递归遍历窗体控件方法还可以先设置一个你只需要提取类型的常量。比如 dim sort1=new string(){"textbox","combox","listbox","listview","datagridview"}用来提取你只需要提取的控件类型。这样更科学
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
Sub getAllCtrl(ctrlAry As ArrayList, ctrl As Control) '遍历窗体控件
For Each c As Control In ctrl.Controls
If Not c.HasChildren Then
ctrlAry.Add(c)
Else
getAllCtrl(ctrlAry, c)
End If
Next
End Sub
Sub SaveAllCtrl()
Dim xmlcls = New With {.dt_control = New DataTable, .dt_gridview = New DataTable} '建议把datagridview分离出来处理,更简捷
xmlcls.dt_control.Columns.Add("cName", Type.GetType("System.String"))
xmlcls.dt_control.Columns.Add("CValue", Type.GetType("System.String"))
Dim qry1 = From ctrl In Me.Controls
Select ctrl
Dim ctrlAry As New ArrayList
For Each ctrl As Control In qry1
getAllCtrl(ctrlAry, ctrl)
Next
For Each ctrl As Control In ctrlAry
Dim CtrlTypename = ctrl.GetType.ToString
Select Case CtrlTypename
Case "textbox"
Dim txt1 = CType(ctrl, TextBox)
Dim dr = xmlcls.dt_control.Rows.Add
dr("cname") = txt1.Name
If Not IsDBNull(ctrl.Text) Then
dr("CValue") = txt1.Text
Else
dr("CValue") = ""
End If
Case "Listbox" 'combox参照执行
Dim listB = CType(ctrl, ListBox)
Dim fillList = Sub(dr As DataRow, CtrlName As String, CtrlValue As String)
dr("cName") = CtrlName
dr("Cvalue") = CtrlValue
End Sub
If listB.Items.Count > 0 Then
For Each item In listB.Items
fillList(xmlcls.dt_control.Rows.Add, listB.Name, item.ToString)
Next
Else
fillList(xmlcls.dt_control.Rows.Add, listB.Name, "")
End If
'...... 其它类型略
Case "gridview" '可以考虑多个dataGridview,设置全局变量,保存一个就+1.我这里就举例1个
Dim gridviewflag = 1 '如有多个,这个设为全局变量
Dim datagridviewPath1 = Path.Combine(CurDir(), "valietedCfg\dataView" & gridviewflag & ".xml")
Dim gridview1 = CType(ctrl, DataGridView)
xmlcls.dt_gridview = gridview1.DataSource '这儿根据实际绑定进行类型转换
xmlcls.dt_gridview.WriteXml(datagridviewPath1, True)
gridviewflag += 1
End Select
Next
xmlcls.dt_control.WriteXml(Path.Combine(CurDir(), "valitedcfg\dataCtrl.xml"), True)
End Sub
ruan1978 2019-04-13
  • 打赏
  • 举报
回复
引用 8 楼 mystery1000 的回复:
统一把这些参数,编成一个类,这个类有保存,读取xml的方法,再在界面类中写两个读取,设置界面的方法,堪称完美
我也有这个想法,把所有功能用类来封装。
mystery1000 2019-04-11
  • 打赏
  • 举报
回复
一切都是黑匣子的概念,一切都是类。一个程序,参数有参数类,产品有产品类,操作IO的有专门的类,底层类,业务逻辑类,界面类。需要保存的,复制读写Xml方法进去就实现了保存读取功能。类定义可以都放在模块里,
mystery1000 2019-04-11
  • 打赏
  • 举报
回复
写程序要分以类为单位,每个类都有自己完整的功能。你这个界面上的值要保存,可以当参数类,界面本身也是类,自然有读出成参数类的方法,和用参数类设置界面的方法。
mystery1000 2019-04-11
  • 打赏
  • 举报
回复
统一把这些参数,编成一个类,这个类有保存,读取xml的方法,再在界面类中写两个读取,设置界面的方法,堪称完美
fishboyok 2019-04-08
  • 打赏
  • 举报
回复
引用 6 楼 ruan1978 的回复:
[quote=引用 5 楼 fishboyok 的回复:] 零碎的控件数据要保存到一个xml文件里,得自己编写读写操作xml文件了。
你有示例嘛?[/quote] 没有。你只要去找操作xml的代码示例就可以了。
fishboyok 2019-04-07
  • 打赏
  • 举报
回复
零碎的控件数据要保存到一个xml文件里,得自己编写读写操作xml文件了。
ruan1978 2019-04-07
  • 打赏
  • 举报
回复
引用 5 楼 fishboyok 的回复:
零碎的控件数据要保存到一个xml文件里,得自己编写读写操作xml文件了。
你有示例嘛?
ruan1978 2019-04-02
  • 打赏
  • 举报
回复
/// XML序列化某一类型到指定的文件 /// </summary> /// <param name="filePath"></param> /// <param name="obj"></param> /// <param name="type"></param> public static void SerializeToXml<T>(string filePath, T obj) { try { using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath)) { System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); xs.Serialize(writer, obj); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } /// <summary> /// 从某一XML文件反序列化到某一类型 /// </summary> /// <param name="filePath">待反序列化的XML文件名称</param> /// <param name="type">反序列化出的</param> /// <returns></returns> public static T DeserializeFromXml<T>(string filePath) { try { if (!System.IO.File.Exists(filePath)) throw new ArgumentNullException(filePath + " not Exists"); using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath)) { System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); T ret = (T)xs.Deserialize(reader); return ret; } } catch (Exception ex) { Console.WriteLine(ex.ToString()); return default(T); } } 怎么转换成vb.net代码?
ruan1978 2019-03-27
  • 打赏
  • 举报
回复
引用 1 楼 智者知已应修善业 的回复:
datagridview绑定表显示及把表存为XML几句就实现了,其他控件从表获取要自己去写实现. 这里有C#的写法,道理是一样的,VB的就不写了. https://blog.csdn.net/xianfajushi/article/details/52402913 https://blog.csdn.net/xianfajushi/article/details/52403021
c#里有个<t>怎么转换成vb.net代码?
  • 打赏
  • 举报
回复
datagridview绑定表显示及把表存为XML几句就实现了,其他控件从表获取要自己去写实现. 这里有C#的写法,道理是一样的,VB的就不写了. https://blog.csdn.net/xianfajushi/article/details/52402913 https://blog.csdn.net/xianfajushi/article/details/52403021
  • 打赏
  • 举报
回复
不用转代码,看懂意思,自己写.C#和VB的函数名都一样.

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧