【急】高分求教PropertyGrid/PropertyGridControl/VGridControl中任何一个的用法 xml文件

黄大仙儿 2014-04-19 04:34:36
读xml文件,para的name是属性名,value中type是数据类型,默认值是value中的innertext

<?xml version="1.0" encoding="utf-8" ?>
<module name="vtk实体">
<para name="X轴旋转">
<value type="float">30</value>
</para>
<para name="Y轴旋转">
<value type="float">-45</value>
</para>
<para name="Z轴旋转">
<value type="float">0</value>
</para>
<para name="实体位置">
<value type="float">0</value>
<value type="float">0</value>
<value type="float">0</value>
</para>
</module>

有多个类似这样的xml文件,求教怎么把属性绑定到PropertyGrid/PropertyGridControl/VGridControl中?
到时候设置完属性,保存的时候只修改xml中value的innertext就OK了
...全文
435 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonesmiller 2015-02-10
  • 打赏
  • 举报
回复
感谢分享。。 我也是来找PropertyGridControl教程的。 _________________ free c#.net qr code creator free qr code creator for .net
wind_cloud2011 2014-04-20
  • 打赏
  • 举报
回复
你看一下这个http://blog.csdn.net/luyifeiniu/article/details/5426960,设置你所需要的PropertyGrid控件,
wind_cloud2011 2014-04-20
  • 打赏
  • 举报
回复
文章里所说的下拉列表阿
wind_cloud2011 2014-04-20
  • 打赏
  • 举报
回复
方法一样吧,控件不一样
黄大仙儿 2014-04-20
  • 打赏
  • 举报
回复
引用 12 楼 wind_cloud2011 的回复:
数据绑定到下拉框
http://social.msdn.microsoft.com/Forums/office/zh-CN/983f57f1-5263-424a-9360-89557486cf24/c-datagridview

不是下拉框吧。。
我希望是弄成这样的
wind_cloud2011 2014-04-20
  • 打赏
  • 举报
回复
数据绑定到下拉框 http://social.msdn.microsoft.com/Forums/office/zh-CN/983f57f1-5263-424a-9360-89557486cf24/c-datagridview
黄大仙儿 2014-04-20
  • 打赏
  • 举报
回复
引用 16 楼 wind_cloud2011 的回复:
你看一下这个http://blog.csdn.net/luyifeiniu/article/details/5426960,设置你所需要的PropertyGrid控件,
这个我之前看到过 但是它要把要显示的属性弄成类 我这个是要读xml的 类是不固定的 没法弄吧
黄大仙儿 2014-04-19
  • 打赏
  • 举报
回复
引用 10 楼 huang369509940 的回复:
[quote=引用 9 楼 wind_cloud2011 的回复:]    DataSet ds = new DataSet(); DataColumn Cw = new DataColumn("value", typeof(float));
我手动先写了个dt

            DataTable dt = new DataTable();
            dt.Columns.Add("X轴旋转", typeof(float));
            dt.Columns.Add("Y轴旋转", typeof(float));
            dt.Columns.Add("Z轴旋转", typeof(float));
            dt.Columns.Add("X", typeof(float));
            dt.Columns.Add("Y", typeof(float));
            dt.Columns.Add("Z", typeof(float));
            dt.Rows.Add(30, -45, 0, 0, 0, 0);
            vGridControl1.DataSource = dt;
Row的FieldName设置了对应的

            string XmlPath = @"C:\Users\asus\Desktop\test.xml";
            XmlDocument xml = new XmlDocument();
            xml.Load(XmlPath);
            XmlElement root = (XmlElement)xml.SelectSingleNode("module");
            string categoryname = root.GetAttribute("name");
            category1.Properties.Caption = categoryname;
            foreach (XmlElement para in root.ChildNodes)
            {
                string paraname = para.GetAttribute("name");
                EditorRow row = new EditorRow();
                row.Properties.Caption = paraname;
                if (para.ChildNodes.Count > 1)
                {
                    foreach (XmlElement value in para.ChildNodes)
                    {
                        EditorRow childrow = new EditorRow();
                        childrow.Properties.Caption =value.GetAttribute("name");
                        childrow.Properties.FieldName = value.GetAttribute("name");
                        childrow.Properties.RowEdit = repositoryItemTextEdit1;
                        //childrow.Properties.Value=value.InnerText;
                        row.ChildRows.Add(childrow);
                        row.Properties.ReadOnly = true;
                    }
                }
                else
                {
                    row.Properties.RowEdit = repositoryItemTextEdit1;
                    row.Properties.FieldName = para.GetAttribute("name");
                    //row.Properties.Value = para.ChildNodes[0].InnerText;
                }
                category1.ChildRows.Add(row);
            }
怎么能让这个实体位置的值是0,0,0?[/quote] 额 我XML也稍微改了一下 忘记发了

<?xml version="1.0" encoding="utf-8" ?>
<module name="vtk实体">
  <para name="X轴旋转" property="RotateX">
    <value type="float">30</value>
  </para>
  <para name="Y轴旋转" property="RotateY">
    <value type="float">-45</value>
  </para>
  <para name="Z轴旋转" property="RotateZ">
    <value type="float">0</value>
  </para>
  <para name="实体位置" property="SetPosition">
    <value name="X" type="float">0</value>
    <value name="Y" type="float">0</value>
    <value name="Z" type="float">0</value>
  </para>
</module>
黄大仙儿 2014-04-19
  • 打赏
  • 举报
回复
引用 9 楼 wind_cloud2011 的回复:
   DataSet ds = new DataSet();
DataColumn Cw = new DataColumn("value", typeof(float));


我手动先写了个dt

DataTable dt = new DataTable();
dt.Columns.Add("X轴旋转", typeof(float));
dt.Columns.Add("Y轴旋转", typeof(float));
dt.Columns.Add("Z轴旋转", typeof(float));
dt.Columns.Add("X", typeof(float));
dt.Columns.Add("Y", typeof(float));
dt.Columns.Add("Z", typeof(float));
dt.Rows.Add(30, -45, 0, 0, 0, 0);
vGridControl1.DataSource = dt;

Row的FieldName设置了对应的

string XmlPath = @"C:\Users\asus\Desktop\test.xml";
XmlDocument xml = new XmlDocument();
xml.Load(XmlPath);
XmlElement root = (XmlElement)xml.SelectSingleNode("module");
string categoryname = root.GetAttribute("name");
category1.Properties.Caption = categoryname;
foreach (XmlElement para in root.ChildNodes)
{
string paraname = para.GetAttribute("name");
EditorRow row = new EditorRow();
row.Properties.Caption = paraname;
if (para.ChildNodes.Count > 1)
{
foreach (XmlElement value in para.ChildNodes)
{
EditorRow childrow = new EditorRow();
childrow.Properties.Caption =value.GetAttribute("name");
childrow.Properties.FieldName = value.GetAttribute("name");
childrow.Properties.RowEdit = repositoryItemTextEdit1;
//childrow.Properties.Value=value.InnerText;
row.ChildRows.Add(childrow);
row.Properties.ReadOnly = true;
}
}
else
{
row.Properties.RowEdit = repositoryItemTextEdit1;
row.Properties.FieldName = para.GetAttribute("name");
//row.Properties.Value = para.ChildNodes[0].InnerText;
}
category1.ChildRows.Add(row);
}

怎么能让这个实体位置的值是0,0,0?
wind_cloud2011 2014-04-19
  • 打赏
  • 举报
回复
   DataSet ds = new DataSet(); DataColumn Cw = new DataColumn("value", typeof(float));
wind_cloud2011 2014-04-19
  • 打赏
  • 举报
回复
将取出的数据,重新再加到新的datatable上,datatable你可以按你的需要增加列
黄大仙儿 2014-04-19
  • 打赏
  • 举报
回复
引用 6 楼 wind_cloud2011 的回复:
或value: string v1 = ds.Tables["value"].Rows[0]["value_text"].ToString(); string v2 = ds.Tables["value"].Rows[1]["value_text"].ToString(); string v3 = ds.Tables["value"].Rows[2]["value_text"].ToString(); string v4 = ds.Tables["value"].Rows[3]["value_text"].ToString(); string v5 = ds.Tables["value"].Rows[4]["value_text"].ToString();
....谢谢你写这么多了... 但不是vgridcontrol.DataSource=ds;这样吗? 取到这些有什么意义啊?怎么绑定到vgridcontrol的属性上去啊? 我试过直接动态添加

string XmlPath = @"test.xml";
            XmlDocument xml = new XmlDocument();
            xml.Load(XmlPath);
            XmlElement root = (XmlElement)xml.SelectSingleNode("module");
            string categoryname = root.GetAttribute("name");
            category1.Properties.Caption = categoryname;
            foreach (XmlElement para in root.ChildNodes)
            {
                string paraname = para.GetAttribute("name");
                EditorRow row = new EditorRow();
                row.Properties.Caption = paraname;
                if(para.ChildNodes.Count>1)
                {
                    foreach (XmlElement value in para.ChildNodes)
                    {
                        EditorRow childrow = new EditorRow();
                        childrow.Properties.Caption =value.GetAttribute("type");
                        childrow.Properties.RowEdit = repositoryItemTextEdit1;
                        childrow.Properties.Value=value.InnerText;
                        row.ChildRows.Add(childrow);
                        row.Properties.ReadOnly = true;
                    }
                }
                else
                {
                    row.Properties.RowEdit = repositoryItemTextEdit1;
                    row.Properties.Value = para.ChildNodes[0].InnerText;
                }
                category1.ChildRows.Add(row);
            }
这样虽然能添加上去,但是没法保证输入的数据类型,只有绑定了DataSource才可以,所以不知道这个DataSet该是什么样,如果一对一的话,很好做,但是这个怎么整啊?

  <para name="实体位置">
    <value type="float">0</value>
    <value type="float">0</value>
    <value type="float">0</value>
  </para>
wind_cloud2011 2014-04-19
  • 打赏
  • 举报
回复
或value: string v1 = ds.Tables["value"].Rows[0]["value_text"].ToString(); string v2 = ds.Tables["value"].Rows[1]["value_text"].ToString(); string v3 = ds.Tables["value"].Rows[2]["value_text"].ToString(); string v4 = ds.Tables["value"].Rows[3]["value_text"].ToString(); string v5 = ds.Tables["value"].Rows[4]["value_text"].ToString();
wind_cloud2011 2014-04-19
  • 打赏
  • 举报
回复
DataSet ds = new DataSet(); ds.ReadXml("tt.xml"); string id1 = ds.Tables["module"].Rows[0]["name"].ToString(); string id2 = ds.Tables["para"].Rows[0]["name"].ToString(); string id3 = ds.Tables["para"].Rows[1]["name"].ToString(); string id4 = ds.Tables["para"].Rows[2]["name"].ToString(); string ty1 = ds.Tables["value"].Rows[0]["type"].ToString(); string ty2 = ds.Tables["value"].Rows[1]["type"].ToString(); string ty3 = ds.Tables["value"].Rows[2]["type"].ToString(); string ty4 = ds.Tables["value"].Rows[3]["type"].ToString(); string ty5 = ds.Tables["value"].Rows[4]["type"].ToString(); string v1 = ds.Tables["value"].Rows[0][1].ToString(); string v2 = ds.Tables["value"].Rows[1][1].ToString(); string v3 = ds.Tables["value"].Rows[2][1].ToString(); string v4 = ds.Tables["value"].Rows[3][1].ToString(); string v5 = ds.Tables["value"].Rows[4][1].ToString();
黄大仙儿 2014-04-19
  • 打赏
  • 举报
回复
引用 3 楼 wind_cloud2011 的回复:
http://bbs.csdn.net/topics/390763331
额。。xml读取到dataset我会。。谢谢 我想问的是 这个xml文件该怎么存成dataset? 一列是属性,一列是值? 可是像

  <para name="实体位置" property="SetPosition">
    <value type="float">0</value>
    <value type="float">0</value>
    <value type="float">0</value>
  </para>
它有3个值,就是得在EditorRow下再加3个子Row 这样dataset该怎么存呢?
wind_cloud2011 2014-04-19
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390763331
黄大仙儿 2014-04-19
  • 打赏
  • 举报
回复
引用 1 楼 lshfong 的回复:
从XML中读出值转为一个datatable,然后绑定之
datatable怎么绑定给那些控件? 给个例子吧 谢谢了~
lshfong 2014-04-19
  • 打赏
  • 举报
回复
从XML中读出值转为一个datatable,然后绑定之
代码下载地址: https://pan.quark.cn/s/068306a56640 在交通运输科学范畴内,交通流量分配是探讨交通系统内交通负荷如何在各个道路路段间进行合理分配的核心议题。交通流分配技术主要应用于模拟和推演交通系统的运行状态,旨在为城市规划人员与交通工程师提供优化道路布局的参考,进而缓解交通拥堵现象,提升道路交通的整体效能。以下将对"交通流分配技术"进行深入阐述: 1. **全部或无分配(All-or-Nothing Distribution)** 全部或无分配是一种基础的交通流分配策略。该技术依据最短路径准则,预设所有从发源地(Origin)至目的地(Destination)的车辆都将选择路程最短的路线。倘若存在多条等长路径,则采用随机方式确定其一条。此类方法未将交通拥堵因素纳入考量,因为一旦选定路径,便假定所有交通量将沿此路径通行,即便这可能导致部分路段出现超负荷状况。 2. **逐步分配(Progressive Assignment)** 逐步分配技术顾及了交通网络的动态特征。该算法通过逐步优化流量配置,力求使网络内行驶的总代价(诸如通行时间、距离等指标)最小化。运算过程始于初始的全部或无分配状态,随后逐步修正路径选择,直至网络达成稳定状态,即每次流量修正后,总代价的变动幅度不再明显。此方法更贴近现实交通场景,因为车辆会依据即时路况选择最优路径。 3. **迭代平均分配(Iterative Average Distribution)** 迭代平均分配是一种对逐步分配技术的优化版本,其更侧重于实现网络流量的均衡化。在每一轮迭代过程,算法不仅评估当前路径的优化程度,同时参考前一次迭代的流量配置。通过融入平均化理念,该方法能更有效地分散交通...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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