本主题提供了关于在 服务器模式 中如何把 GridControl 绑定到数据源的逐步操作说明。 要获得在服务器模式中绑定控件的总说明和理论点,请参阅 服务器模式 章节。
前提
在本例中,一个网格控件被绑定到“Person.Contact”数据表。 在与 MS SQL Server 一起提供的标准 AdventureWorks SQL 数据库中包含此数据表。 要执行下面的步骤,需要访问包含此数据库的 SQL Server 实例。
在服务器模式中,不管控件是否在设计时刻或是在运行时刻被绑定到数据源,都需要创建一个说明目标数据表的对象。 此对象应标识数据表的名称,以及在网格中显示为列的必要的数据字段。 在服务器模式中绑定数据源 主题概述了两种创建此对象的方法: 1) 通过持久化对象; 2) 通过类型化 DataTable 对象。
在本例中,通过创建一个持久化对象类 (Person_Contact),来提供关于目标数据表的说明信息。 要获得关于创建持久化对象的总说明,请参阅 为现有数据表创建持久化对象的要素。 定义 Person_Contact 类,如下所示:
C# | 复制代码 |
---|---|
using DevExpress.Xpo; [Persistent("Person.Contact")] public class Person_Contact : XPLiteObject { public Person_Contact(Session session) : base(session) { } [Key, DevExpress.Xpo.DisplayName("ID")] public System.Int32 ContactID; public string Title; [DevExpress.Xpo.DisplayName("First Name")] public string FirstName; [DevExpress.Xpo.DisplayName("Middle Name")] public string MiddleName; [DevExpress.Xpo.DisplayName("Last Name")] public string LastName; [DevExpress.Xpo.DisplayName("E-mail")] public string EmailAddress; public string Phone; } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.Xpo; <Persistent("Person.Contact")> _ Public Class Person_Contact Inherits XPLiteObject Public Sub New(ByVal session As Session) MyBase.New(session) End Sub <Key(), DevExpress.Xpo.DisplayName("ID")> _ Public ContactID As System.Int32 Public Title As String <DevExpress.Xpo.DisplayName("First Name")> _ Public FirstName As String <DevExpress.Xpo.DisplayName("Middle Name")> _ Public MiddleName As String <DevExpress.Xpo.DisplayName("Last Name")> _ Public LastName As String <DevExpress.Xpo.DisplayName("E-mail")> _ Public EmailAddress As String Public Phone As String End Class |
Person_Contact 持久化对象派生于 XPLiteObject 类 (也可以派生于 XPBaseObject 类)。 它公开了与目标数据表中数据字段对应的公共属性,以及有一个 session 参数的公共构造函数。 此构造函数被用于允许在非默认 会话 范围内处理数据。
持久化对象始终必须包含对应于键字段的公共属性。 该属性必须加注 KeyAttribute attribute 。
注意类名称前面的 Persistent 关键字。 它表示 PersistentAttribute attribute 被用于把 Person_Contact 类映射到 “Person.Contact”数据表。 DisplayNameAttribute attribute 允许定制与属性关联的显示名称。 这些名称被显示在网格控件中的列标头。
设计时刻示例
- 在 Visual Studio 中新建一个 Windows 应用程序。
- 从工具箱中把一个 Session 和 XPServerCollectionSource 组件添加到窗体中。
- 切换到代码编辑器,添加 Person_Contact 类声明 (请参阅上面)。
- 选择 生成 | 重新生成解决方案 菜单命令重新生成项目。
- 切换到设计时刻编辑器,在“属性”窗口中显示所创建的 XPServerCollectionSource 组件的属性。
- 在“属性”窗口中打开与 XPServerCollectionSource.ObjectClassInfo 属性对应的下拉列表,选中“Person_Contact”项。 该类的名称应以命名空间名称前导:
- 把 XPServerCollectionSource.Session 属性设置为之前创建的会话对象。
- 从工具箱中把 GridControl 控件添加到窗体中。
- 在“属性”窗口中,把 GridControl.DataSource 属性设置为所创建的 XPServerCollectionSource 对象 (xpServerCollectionSource1)。 在指派数据源之后,网格控件自动为 Person_Contact 类公开的所有公共属性创建列。
- 把控件的 GridControl.ServerMode 属性设置为 true。
- 切换到代码编辑器,在窗体的构造函数中指定对 SQL Server 实例 (此实例包含 AdventureWorks 数据库) 的连接设置。 在本例中,通过 XpoDefault.ConnectionString 静态属性提供连接字符串。 该属性指定的连接字符串在默认情况下被所有会话使用。
要生成对 SQL Server 的连接字符串,可以使用 MSSqlConnectionProvider.GetConnectionString 静态方法。 在下面调用此方法的重载,使用服务器和数据库名称作为参数,并使用 Windows 身份验证方式生成连接字符串 (也可以使用另一个重载,生成含有特定用户名和密码的连接字符串):
C# 复制代码 using DevExpress.Xpo; using DevExpress.Xpo.DB; public partial class Form1 : Form { public Form1() { // Generate the connection string to the AdventureWorks database on local SQL Server. XpoDefault.ConnectionString = MSSqlConnectionProvider.GetConnectionString("(local)", "AdventureWorks"); InitializeComponent(); } }
Visual Basic 复制代码 Imports DevExpress.Xpo Imports DevExpress.Xpo.DB Public Class Form1 Sub New() ' Generate the connection string to the AdventureWorks database on local SQL Server. XpoDefault.ConnectionString = _ MSSqlConnectionProvider.GetConnectionString("(local)", "AdventureWorks") InitializeComponent() End Sub End Class
- 运行项目。 使用数据填充的 GridControl 的窗体将出现:
运行时刻示例
下列代码与上面所述的设计时刻操作等效。 要编译此代码,需要人工添加 XtraGrid 和 eXpress Persistent Objects (DevExpress.Data、DevExpress.Utils、DevExpress.Xpo、DevExpress.XtraEditors 和 DevExpress.XtraGrid) 所必需的程序集引用:
C# | 复制代码 |
---|---|
using System.Windows.Forms; using DevExpress.Xpo; using DevExpress.Xpo.DB; using DevExpress.Xpo.Metadata; using DevExpress.XtraGrid; namespace ServerModeDemoRuntime { public partial class Form1 : Form { public Form1() { InitializeComponent(); // Generate the connection string to the AdventureWorks database on local SQL Server. XpoDefault.ConnectionString = MSSqlConnectionProvider.GetConnectionString("(local)", "AdventureWorks"); // Create a Session object. Session session1 = new Session(); // Create an XPClassInfo object corresponding to the Person_Contact class. XPClassInfo classInfo = session1.GetClassInfo(typeof(Person_Contact)); // Create an XPServerCollectionSource object. XPServerCollectionSource xpServerCollectionSource1 = new XPServerCollectionSource(session1, classInfo); // Create a grid control. GridControl gridControl1 = new GridControl(); gridControl1.Dock = DockStyle.Fill; this.Controls.Add(gridControl1); // Enable server mode. gridControl1.ServerMode = true; // Bind the grid control to the data source. gridControl1.DataSource = xpServerCollectionSource1; } } [Persistent("Person.Contact")] public class Person_Contact : XPLiteObject { public Person_Contact(Session session) : base(session) { } [Key, DevExpress.Xpo.DisplayName("ID")] public System.Int32 ContactID; public string Title; [DevExpress.Xpo.DisplayName("First Name")] public string FirstName; [DevExpress.Xpo.DisplayName("Middle Name")] public string MiddleName; [DevExpress.Xpo.DisplayName("Last Name")] public string LastName; [DevExpress.Xpo.DisplayName("E-mail")] public string EmailAddress; public string Phone; } } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.Xpo Imports DevExpress.Xpo.DB Imports DevExpress.Xpo.Metadata Imports DevExpress.XtraGrid Public Class Form1 Sub New() InitializeComponent() ' Generate the connection string to the AdventureWorks database on local SQL Server. XpoDefault.ConnectionString = _ MSSqlConnectionProvider.GetConnectionString("(local)", "AdventureWorks") ' Create a Session object. Dim session1 As Session = New Session() ' Create an XPClassInfo object corresponding to the Person_Contact class. Dim classInfo As XPClassInfo = session1.GetClassInfo(GetType(Person_Contact)) ' Create an XPServerCollectionSource object. Dim xpServerCollectionSource1 As XPServerCollectionSource = _ New XPServerCollectionSource(session1, classInfo) ' Create a grid control. Dim gridControl1 As GridControl = New GridControl() gridControl1.Dock = DockStyle.Fill Me.Controls.Add(gridControl1) ' Enable server mode. gridControl1.ServerMode = True ' Bind the grid control to the data source. gridControl1.DataSource = xpServerCollectionSource1 End Sub End Class <Persistent("Person.Contact")> _ Public Class Person_Contact Inherits XPLiteObject Public Sub New(ByVal session As Session) MyBase.New(session) End Sub <Key(), DevExpress.Xpo.DisplayName("ID")> _ Public ContactID As System.Int32 Public Title As String <DevExpress.Xpo.DisplayName("First Name")> _ Public FirstName As String <DevExpress.Xpo.DisplayName("Middle Name")> _ Public MiddleName As String <DevExpress.Xpo.DisplayName("Last Name")> _ Public LastName As String <DevExpress.Xpo.DisplayName("E-mail")> _ Public EmailAddress As String Public Phone As String End Class |