2017-07-06 33 views
0

我有一個類,其中我將FileALineFileBLine屬性的所有值存儲到名爲Changes的列表中 屬性的代碼如下所示。GridControl在新行顯示值

public class Result 
{ 
    public Result() 
    { 
     this.Changes = new List<Difference>(); 
    } 

    public IList<Difference> Changes { get; set; } 
} 

public class Differences 
{ 
    public int LineNumber { get; set; } 

    public string FileALine { get; set; } 

    public string FileBLine { get; set; } 
} 

我打電話給Changes列表從一個窗體填充Synfusion GridControl。它有兩列DataRowDetails。現在,我只能將FileAline值或FileBLine值填入第二列。

我無法弄清楚如何在下一行顯示FileAline值和FileBLine值,如下圖所示。

public partial class Form: Form 
{ 
    private void DisplayValues(Result result) 
    { 
     if (result != null && result.Changes.Count > 0) 
     { 
      var differences = result.Changes; 
      this.detailsGridControl.RowCount = differences.Count; 
      this.detailsGridControl.ColCount = 2; 

      for (var i = 0; i < differences.Count; i++) 
      { 
       var detailsA = differences[i]; 
       var row = i + 1; 
       this.detailsGridControl[row, (int)FormColumns.DataRow].Text = detailsA.LineNumber.ToString(); 
       this.detailsGridControl[row, (int)FormColumns.Details].Text = detailsA.FileALine; 
       this.detailsGridControl[row, (int)FormColumns.Details].Text = detailsA.FileBLine; 
      } 
     } 
    } 
} 

所以輸出必須是這樣的東西。

Output

就如何實現這一目標有什麼建議?

在此先感謝!

回答

2

請嘗試以下建議。

建議1

在DisplayValues()形式的方法,您要設置FileALine和FileBLine爲同一個小區。因此,CellValue將被覆蓋並僅返回FileBLine。爲了從列表中設置CellValue,可以使用PopulateValues()方法。請參閱下面的代碼和樣本,

Dim difference As New List(Of Differences)() 
difference.Add(New Differences() With {.LineNumber = 1, .FileALine = `"FileLineA", .FileBLine = "FileLineB"}) 
difference.Add(New Differences() With {.LineNumber = 2, .FileALine = "FileLineB", .FileBLine = "FileLineA"}) 
Dim r As New Result() 
For Each d As Differences In difference 
r.Changes.Add(New Data() With {.DataRow = d.LineNumber, .Details = d.FileALine}) 
r.Changes.Add(New Data() With {.DataRow = d.LineNumber, .Details = d.FileBLine}) 
Next d 
Me.gridControl1.PopulateHeaders(GridRangeInfo.Cells(0, 1, gridControl1.RowCount, gridControl1.ColCount), r.Changes) 
Me.gridControl1.PopulateValues(GridRangeInfo.Cells(1, 1, gridControl1.RowCount, gridControl1.ColCount), r.Changes) 
Me.gridControl1.Refresh() 

建議2

您還可以設置通過GridStyleInfo類的Text屬性CellValue。請參考示例,

Dim difference As New List(Of Differences)() 
difference.Add(New Differences() With {.LineNumber = 1, .FileALine = "FileLineA", .FileBLine = "FileLineB"}) 
difference.Add(New Differences() With {.LineNumber = 2, .FileALine = "FileLineB", .FileBLine = "FileLineA"}) 
Dim r As New Result() 
For Each d As Differences In difference 
r.Changes.Add(New Data() With {.DataRow = d.LineNumber, .Details = d.FileALine}) 
r.Changes.Add(New Data() With {.DataRow = d.LineNumber, .Details = d.FileBLine}) 
Next d 
DisplayValues(r) 
Private Sub DisplayValues(ByVal result As Result) 
If result IsNot Nothing AndAlso result.Changes.Count > 0 Then 
    Dim differences = result.Changes 
    Me.gridControl1.RowCount = result.Changes.Count 
    Me.gridControl1.ColCount = 2 
    For i = 0 To differences.Count - 1 
     Dim detailsA = TryCast(differences(i), Data) 
     Dim row = i + 1 
     Me.gridControl1(row, 1).Text = detailsA.DataRow.ToString() 
    'To set FileALine or FileBLine for column 2 
     Me.gridControl1(row, 2).Text = detailsA.Details 
     Next i 
    End If 
End Sub 

注意:您可以創建一個列表對象,以便將數據填充爲方便。

+0

謝謝你的建議,將試試:) – Dazzler

1

其實想出瞭解決方案。

for (var i = 0; i < differences.Count; i++) 
{ 
    var detailsA = differences[i]; 
    var row = i + 1; 
    this.detailsGridControl[row, (int)FormColumns.DataRow].Text = detailsA.LineNumber.ToString(); 
    this.detailsGridControl[row, (int)FormColumns.Details].Text = detailsA.FileALine + Environment.NewLine + detailsA.FileBLine; 
}