我们可以将动态数据(数据集或列表)绑定到WPF中的控件吗

发布于 2024-09-03 00:41:50 字数 176 浏览 2 评论 0原文

我有一个用户控件...并且使用此用户控件的基页有一个将由用户控件使用的数据集。

我的数据集是动态的......意味着......它可以有不同数量的列,具体取决于我的用户控件实现的页面。 wpf 中是否有任何控件可以用来绑定此数据集(不知道列信息)...我的意思是类似于 2.0 中的 datagrid/gridview ?

I have a user control...and the base page(s) which uses this user control has a dataset which will be used by the user control.

My dataset is dynamic...means..it can have different number of columns depending upon which page my usercontrol is implemented. Is there any control in wpf which i can use to bind this dataset (without knowing the column information) ...i mean similar to datagrid/gridview in 2.0 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

各自安好 2024-09-10 00:41:50

看一下 WPF 工具包,其中包含满足您要求的网格。

该工具包由 Microsoft 构建,是 Microsoft 共享源计划的一部分(请参阅我提供的链接)。

不过,我的 Microsoft 不支持它,因此如果您遇到错误,您可以使用他们的论坛,但不能致电 MS 支持。

如果您确实想自己执行此操作,则可以编写一些采用 List 的代码,获取泛型类型,获取属性,迭代它们,编写列标题,迭代列表中的所有项目并写入所有属性。

我不久前写了这段代码,将列表写入 HTML 表,我希望它有用:

public void PrintList<T>(List<T> list)
{
    if(null!=list.FirstOrDefault())
    {
       Type t = typeof(list[0]);
       PropertyInfo[] properties = t.GetProperties();

       // properties = list of all properties.

       print("<table><tr>");

       foreach(var property in properties)
       {
          // print property title
          print(string.Format("<th>{0}</th>", property.Name));
       }   


       print("</tr>");

       foreach(var item in list)
       {
          print("<tr>");
          foreach(var property in properties)
          {
               var propertyValue = t.InvokeMember(property.Name, BindingFlags.GetProperty, null, item, new object[] {});
               print(string.Format("<td>{0}</td>", propertyValue));
          }

          print("</tr>");
       }

       print("</table>");
    }
}

Take a look at the WPF toolkit, this contains a Grid which meets your requirements.

This toolkit is built by Microsoft, and part of the Microsoft Shared Source Initiative (see the link I provided).

It's not supported my Microsoft though, so if you get a bug you can use their forums but not call MS support.

If you do want to do it yourself, you can for example write some code that takes a List<T>, you get the generic type, get the properties, iterate over them, write the column headers, iterate over all the items in the list and write all the properties.

I wrote this code a while back to write a List to an HTML table, I hope it's useful:

public void PrintList<T>(List<T> list)
{
    if(null!=list.FirstOrDefault())
    {
       Type t = typeof(list[0]);
       PropertyInfo[] properties = t.GetProperties();

       // properties = list of all properties.

       print("<table><tr>");

       foreach(var property in properties)
       {
          // print property title
          print(string.Format("<th>{0}</th>", property.Name));
       }   


       print("</tr>");

       foreach(var item in list)
       {
          print("<tr>");
          foreach(var property in properties)
          {
               var propertyValue = t.InvokeMember(property.Name, BindingFlags.GetProperty, null, item, new object[] {});
               print(string.Format("<td>{0}</td>", propertyValue));
          }

          print("</tr>");
       }

       print("</table>");
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文