2016-09-26 2 views
0

Ich habe 2 gridControl und ich möchte Hintergrund der Zellen (Zeilen) ändern, die sich zwischen 2 gridControl mit Primärschlüssel ist mehrere Feld von Benutzer festgelegt.
Eine Lösung für dieses Problem?DevExpress Winform - Wie man Daten zwischen zwei Gridcontrol auf mehreren Schlüsselfeld

See this example image

In dieser zwei Abfrage ist Schlüsselfeld col1, col2, col3 und col4. Anders in col6 und ich möchte Zellen hervorheben, die unterschiedliche Werte haben.

Dies ist mein aktueller Code für RowCellStyle Ereignis

private void gvQuery1_RowCellStyle(object sender, RowCellStyleEventArgs e) 
{ 
    if (gcQuery2.DataSource == null || lsKey == null || lsKey.Count <= 0) 
     return; 

    List<object> id = new List<object>(); 
    foreach (KeyObject key in lsKey) 
    { 
     id.Add((sender as GridView).GetRowCellValue(e.RowHandle, key.key1[1].ToString())); 
    } 
    for (int i = 0; i < gvQuery2.RowCount; i++) 
    { 
     int rowHandle = gvQuery2.GetVisibleRowHandle(i); 
     bool flgEqual = true; 

     for (int j = 0; j < lsKey.Count; j++) 
     { 
      object v = gvQuery2.GetRowCellValue(rowHandle, gvQuery2.VisibleColumns[int.Parse(lsKey[j].key2[0].ToString())]); 
      if (id[j] == null && v == null) 
       continue; 
      if (!id[j].GetType().Equals(v.GetType()) || !id[j].ToString().Equals(v.ToString())) 
      { 
       flgEqual = false; 
       break; 
      } 
     } 

     if (flgEqual) 
     { 
      for (int k = 0; k < (sender as GridView).Columns.Count; k++) 
      { 
       if (!(sender as GridView).GetRowCellValue(e.RowHandle, (sender as GridView).Columns[k].FieldName).ToString() 
        .Equals(gvQuery2.GetRowCellValue(rowHandle, (sender as GridView).Columns[k].FieldName).ToString())) 
       { 
        if (e.Column.FieldName.Equals((sender as GridView).Columns[k].FieldName)) 
         e.Appearance.BackColor = Color.Orange; 
       } 
      } 

      break; 
     } 
    } 
} 
+0

Zeigen Sie Aufwand und wo ist das Problem. – mybirthname

Antwort

0

das GridView.RowCellStyle Ereignis verwenden, die Anzeigeeinstellungen von einzelnen Zellen ermöglicht

Bitte beachten Sie diese Seite für Ihre Referenz https://www.devexpress.com/Support/Center/Question/Details/Q520842

geändert werden
void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) 
{ 
    GridView currentView = sender as GridView; 
    if (e.Column.FieldName == "Customer") 
    { 
    bool value = Convert.ToBoolean(currentView.GetRowCellValue(e.RowHandle, "Flag_Customer")); 
    if (value) 
     e.Appearance.BackColor = Color.Red; 
    } 
    if (e.Column.FieldName == "Vendor") 
    { 
     bool value = Convert.ToBoolean(currentView.GetRowCellValue(e.RowHandle, "Flat_Vendor")); 
     if (value) 
     e.Appearance.BackColor = Color.Red; 
    } 
} 
+0

Ich kann nicht Hintergrundfarbe des zweiten gridControl mit diesem ändern (oder ich weiß nicht, wie man das macht) –

+0

beide sind Devexpress Controls –

+0

Können Sie mir deutlicher sagen? –

0

Siehe hierzu:Customizing Appearances of Individual Rows and Cells

Sie können Ihre Funktionalität mit dem GridView.RowCellStyle Ereignis implementieren. Dieses Ereignis wird für jede Zelle in einer Rasteransicht ausgelöst und hat daher Spalte und RowHandle Parameter , die die Zelle identifizieren, die gemalt wird.

Ich nehme an, dass Sie eine feste Anzahl von Datensätzen in beiden Grid haben und auch die Reihenfolge der Datensätze sind gleich. Dann können Sie versuchen, Benutzer derselben Zeile Griff, um den Wert Zugang von der Mainview das beide Gitter auf RowCellStyle Ereignis wie folgt:

using DevExpress.XtraGrid.Views.Grid; 
    // ... 
    private void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) { 
     GridView View = sender as GridView; 
     GridView leftGridView = leftGrid.MainView as GridView; //It is up to you that which viewtype you have used. 
     if(e.Column.FieldName == "Col5") { 
      string srcVal= View.GetRowCellDisplayText(e.RowHandle, View.Columns["Col5"]); // You can use GetRowCellValue() method also to get the value from the cell. 
      string leftGridVal= leftGridView .GetRowCellDisplayText(e.RowHandle, leftGridView .Columns["Col5"]); 
      if(srcVal != leftGridVal) { 
      e.Appearance.BackColor = Color.DeepSkyBlue; 
      e.Appearance.BackColor2 = Color.LightCyan; 
      } 
     } 
    } 

Above Codeausschnitt ist wie ein sudo Code leiten Sie die Funktionalität zu implementieren .. Griff Dieses Ereignis in diesem Raster, auf dem Sie malen möchten. Denken Sie daran, sich um das RowHandle zu kümmern, Sie müssen auf den Zeilenindex achten.

Hope this help ..

+0

Der Schlüssel für die Kartenrelation zwischen 2 'gridControl' ist nicht nur 1, es ist ein mehrfaches Feld, das vom Benutzer gesetzt wird, also kann ich nicht nur mit 'if (e.Column.FieldName == "Col5") 'vergleichen –

+0

Es ist ein Beispiel .. Es ist nicht unmöglich, mehrere Spaltenwerte zu vergleichen, wenn Sie auf diese Zeilen gleichzeitig zugreifen können. –

Verwandte Themen