【急】高分求教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了
...全文
326 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,然后绑定之

110,533

社区成员

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

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

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