我是C#的新手(来自Java背景)我正在研究Form
以快速管理不同的数据(例如用户,域名,计算机)以及提供使用数据的实用程序
为避免混淆,以下是示例数据结构的摘要;
<User> <Name>joe</Name> <Domain>europa</Domain> </User> <Domain> <Name>europa<Name> <Domain> <Domain> <Name>group</Name> </Domain> <Computer> <Name>localhost</Name> </Computer>
在我的Form
我有每个数据的标签页,每个标签包含DataGridView
(包含每个成员的列),以便进行简单管理。我正在使用单个DataSet
,当Form
Load事件被触发时,它会从XML文件中读取数据(使用模式)。在阅读数据后,我使用代码将表格设置为各自DataSource
的{{1}};
userDataGridView.DataSource = dataSet.Tables["User"]; domainDataGridView.DataSource = dataSet.Tables["Domain"]; computerDataGridView.DataSource = dataSet.Tables["Computer"];
这适用于域和计算机DataGridView
,因为它们只有单个文本列,这些列映射到Name属性。但是,用户DataGridViews
的域列是一个组合框,我需要它包含所有可能的域(例如欧罗巴,组)以及绑定到User.Domain的所选域(同样, User.Domain最初被选中)。
我的主要问题是我如何实现上述目标,但我还有一些其他问题希望有人可以回答;
DataGridView
所做的更改会立即保留在基础XML文件中,因为我正在从构建的输出目录中读取它。这是正确的还是需要额外的配置/过程?DataGridView
,如下所示;
DataRelation dataRelation = new DataRelation("Domain users", dataSet.Tables["Domain"].Columns["Domain"], dataSet.Tables["User"].Columns["Domain"]); dataSet.Relations.Add(dataRelation);
DataRelation
究竟如何运作以及它们有什么作用?如果它有助于您理解/解释我正在使用SharpDevelop IDE来处理此应用程序。
提前致谢。
答案 0 :(得分:2)
正如您已经发现的那样,DataGridView
非常强大,并且以自动方式完成大部分工作。不幸的是,如果这些默认值与您的首选项不匹配(例如使用ComboBox作为文本属性),则会遇到问题。
要将DataGridViewComboBoxColumn
放到正确的位置,您可以在代码中以编程方式执行此操作,或者(如果可能)使用设计器执行此操作(在Visual Studio中不知道SharpDevelop是否支持它)。
对于这种情况,有必要通过提供一个将所有(或多个)信息保存为简单属性的类(如具有属性名称,年龄等的人类),在设计时知道数据结构。如果可用,您可以向控件添加BindingSource
,然后在属性窗口中单击 DataSource 属性旁边的按钮。选择添加项目数据源并选择对象并选择所需的对象。
现在您有一个使用特定类型的DataSource配置的绑定源。接下来选择DataGridView并将 DataSource 属性更改为最近创建的绑定源。
在此之后,DataGridView将自动填充每个属性的列。现在,您可以轻松地进入 Columns 属性,并根据需要更改每列的行为和类型。
要将具体数据与DataGridView连接,只需将表格应用于绑定源。
如果您有Visual Studio并按照上述步骤操作,则可以轻松查看Designer.cs文件以查找Visual Studio如何完成所有操作。你也无法手动做任何事情。所以,如果你需要这样做。
只需创建DataGridViewComboBoxColumn
,设置DataPropertyName
和HeaderText
即可获得良好的起点。获取要替换的IndexOf()
列,将其删除并在所需位置Insert()
新创建的列。
在Grid可以显示一些数据之前(在ComboBoxColumn中),您需要提供一个包含可能值的列表。为此,comboBoxColumn本身具有 DataSource 属性,您可以在其中提供所需的值。在最简单的情况下,您只需提供ICollection<string>
,但您也可以提供更复杂的内容,例如List<KeyValuePair<Enum, string>>
。如果是这种情况,您还应该设置属性ValueMember
和DisplayMember
以告诉ComboBox应该使用哪些对象属性来填充列表。
也许有了这些信息,你应该看一下MSDN article about the DataGridViewComboBoxColumn并研究一下这个例子。这应该给你一些关于如何正确设置它的额外提示。