DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

[DevExpress教程]如何使用UnboundSource组件添加虚拟行

来源:   发布时间:2017-09-28   浏览:2506次

绑定到数据源的数据感知控件可以要求显示附加项。这些项,由控件显示但不存储在其底层数据源中,被称为虚拟或未绑定行。此示例演示如何使用UnboundSource组件实现这些行。

1. 使用lookup editor时经常需要虚拟行,这些行通常需要在其下拉列表中显示“全部”或“无”等服务项。因此,首先将UnboundSource组件和LookUpEdit控件添加到表单中。

2. 使用UnboundSource组件为lookup editor提供数据。本文将介绍整个过程。以下是您需要做什么的简要说明。

· 准备外部数据集。对于此示例应用程序,您可以使用填充有简单实体的列表结构,如下所示:

[C#]

public partial class Form1 : Form {
    public List<Product> Products = new List<Product>();

    public Form1() {
        InitializeComponent();
        Products.AddRange(new Product[] {
            new Product(1, "Item One"),
            new Product (2, "Item Two"),
            new Product(3, "Item Three")});
    }
    
}

public class Product {
    public Product(int ID, string productName) {
        this.ID = ID;
        this.ProductName = productName;
    }

    public int ID { get; set; }
    public string ProductName { get; set; }
}

[VB]

Partial Public Class Form1

    Inherits Form



    Public Products As New List(Of Product)()



    Public Sub New()

        InitializeComponent()

        Products.AddRange(New Product() {

            New Product(1, "Item One"),

            New Product(2, "Item Two"),

            New Product(3, "Item Three")

        })

    End Sub



End Class



Public Class Product

    Public Sub New(ByVal ID As Integer, ByVal productName As String)

        Me.ID = ID

        Me.ProductName = productName

    End Sub



    Public Property ID() As Integer

    Public Property ProductName() As String

End Class

· 将数据字段添加到您的UnboundSource组件。字段名称必须参考现有的数据集字段。

· 将UnboundSource组件分配给编辑器的RepositoryItemLookUpEditBase.DataSource属性。

· 指定编辑器的RepositoryItemLookUpEditBase.DisplayMember和RepositoryItemLookUpEditBase.ValueMember属性。

3. 调用组件的SetRowCount方法来指定“查找”应显示的项数。通常,您将使用实际数据集行计数作为方法的参数。由于我们需要多个附加行,请使用如下所示的较高值。

[C#]

public const int NotInListItemsCount = 2;
unboundSource1.SetRowCount(Products.Count + NotInListItemsCount);

[VB]

Public Const NotInListItemsCount As Integer = 2
unboundSource1.SetRowCount(Products.Count + NotInListItemsCount)

4. 最后,处理组件的ValueNeeded事件并添加所需的虚拟行。

[C#]

void unboundSource1_ValueNeeded(object sender, DevExpress.Data.UnboundSourceValueNeededEventArgs e) {
    e.Value = GetExtendedListValues(e.RowIndex, e.PropertyName);
}

object GetExtendedListValues(int rowIndex, string propertyName) {
    switch(propertyName) {
        case "ID":
            switch(rowIndex) {
                case 0:
                    return null;
                case 1:
                    return null;
                default:
                    return Products[rowIndex - NotInListItemsCount].ID;
            }
        case "ProductName":
            switch(rowIndex) {
                case 0:
                    return "None";
                case 1:
                    return "All";
                default:
                    return Products[rowIndex - NotInListItemsCount].ProductName;
            }
        default:
            return null;
    }
}

[VB]

Private Sub unboundSource1_ValueNeeded(ByVal sender As Object, ByVal e As DevExpress.Data.UnboundSourceValueNeededEventArgs)
    e.Value = GetExtendedListValues(e.RowIndex, e.PropertyName)
End Sub 

Private Function GetExtendedListValues(ByVal rowIndex As Integer, ByVal propertyName As String) As Object 
    Select Case propertyName
        Case "ID" 
            Select Case rowIndex
                Case 0
                    Return Nothing 
                Case 1
                    Return Nothing 
                Case Else 
                    Return Products(rowIndex - NotInListItemsCount).ID
            End Select 
        Case "ProductName" 
            Select Case rowIndex
                Case 0
                    Return "None" 
                Case 1
                    Return "All" 
                Case Else 
                    Return Products(rowIndex - NotInListItemsCount).ProductName
            End Select 
        Case Else 
            Return Nothing 
    End Select 
End Function

结果如下图所示:

慧都学院2017全新DevExpress线下研修班火热报名中!


本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/910.html
在线
客服
微信
QQ 电话
023-68661681
返回
顶部