Code Bye

PropertyGrid/PropertyGridControl/VGridControl的用法

xml文件,para的name是属性名,value中type是数据类型,默认值是value中的innertext
pre class=”brush: html”>
<?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>
/pre>
有多个类似这样的xml文件,怎么把属性绑定到PropertyGrid/PropertyGridControl/VGridControl中?
到时候设置完属性,保存的时候只修改xml中value的innertext就OK了


30分
从XML中读出值转为一个datatable,然后绑定之
我想问的是 这个xml文件该怎么存成dataset?
一列是属性,一列是值?
可是像
pre class=”brush: html”>
<para name=”实体位置” property=”SetPosition”>
<value type=”float”>0</value>
<value type=”float”>0</value>
<value type=”float”>0</value>
</para>
/pre>
它有3个值,就是得在EditorRow下再加3个子Row
这样dataset该怎么存呢?

20分
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();

20分
或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();
/div>
引用 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的属性上去啊?
我试过直接动态添加
pre class=”brush: csharp”>
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);
}
/pre>
这样虽然能添加上去,但是没法保证输入的数据类型,只有绑定了DataSource才可以,所以不知道这个DataSet该是什么样,如果一对一的话,很好做,但是这个怎么整啊?
pre class=”brush: html”>
<para name=”实体位置”>
<value type=”float”>0</value>
<value type=”float”>0</value>
<value type=”float”>0</value>
</para>
/pre>


30分
将取出的数据,重新再加到新的datatable上,datatable你可以按你的需要增加列
   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设置了对应的
pre class=”brush: csharp”>
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);
}
/pre>
怎么能让这个实体位置的值是0,0,0?

引用 10 楼 huang369509940 的回复:

我手动先写了个dt
pre class=”brush: csharp”>
DataTable dt = new DataTable();

额 我XML也稍微改了一下 忘记发了
pre class=”brush: html”>
<?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>
/pre>

数据绑定到下拉框
http://social.msdn.microsoft.com/Forums/office/zh-CN/983f57f1-5263-424a-9360-89557486cf24/c-datagridview
引用 12 楼 wind_cloud2011 的回复:

数据绑定到下拉框
http://social.msdn.microsoft.com/Forums/office/zh-CN/983f57f1-5263-424a-9360-89557486cf24/c-datagridview

不是下拉框吧。。
我希望是弄成这样的 

你看一下这个http://blog.csdn.net/luyifeiniu/article/details/5426960,设置你所需要的PropertyGrid控件,
引用

你看一下这个http://blog.csdn.net/luyifeiniu/article/details/5426960,设置你所需要的PropertyGrid控件,

这个我之前看到过 但是它要把要显示的属性弄成类 我这个是要读xml的 类是不固定的 没法弄吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明PropertyGrid/PropertyGridControl/VGridControl的用法