2017-06-19 4 views
1

Ich bin Wörterbuch an mein DataGrid binden. Jetzt möchte ich die ausgewählte Zeile aus dem DataGrid abrufen. Hier ist, was ich bis jetzt versucht habe.So erhalten Sie ausgewählteRow-Daten aus DataGrid in C#

Dictionary<int, string> dicKeyValue = new Dictionary<int, string>(); 

public MainWindow() 
    { 
     InitializeComponent(); 

     dataGrid.DataContext = dicKeyValue; 

     dicKeyValue.Add(1, "INDIA"); 
     dicKeyValue.Add(2, "CHINA"); 
     dicKeyValue.Add(3, "AMERICA"); 
     dicKeyValue.Add(4, "RUSSIA"); 

    } 

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var sample = (sender as DataGrid).SelectedItem as ****** 
     // Here in the above line what should I write to get the values of selected row. 

     if (sample != null) 
     { 

     } 


    } 

beim Debuggen Ich habe versucht, dies in dem Direkt-Fenster .....

((sender as DataGrid).SelectedItem) 
{[8, SCAN]} 
Key: 8 
Value: "SCAN" 
key: 8 
value: "SCAN" 

Jetzt können euch bitte helfen Sie mir, wie dies für den Zugriff auf ...

Meine Frage aussehen ähnlich wie this, aber in meiner Frage möchte ich den richtigen Typ kennen, in den ich das SelectedItem tippen kann.

+1

@Kartoffel In dem Link zur Verfügung gestellt, sie es in die Klasse zu binden, so dass es möglich zu werfen ist. Aber in meinem Fall binde ich es an das Wörterbuch. Also frage ich den richtigen Typ, in den ich werfen kann. Ich denke, beide Fragen sind anders .... –

Antwort

2

Dictionary<TKey, TValue> erbt ICollection<KeyValuePair<TKey, TValue>>, so sollte Ihr Elementtyp KeyValuePair<int, string> sein. Zum Gießen Zwecke, könnten Sie die Nullable<T> verwenden:

var item = dataGrid.SelectedItem as KeyValuePair<int, string>?; 
if (item.HasValue) // use item.Value 

Allerdings könnte es sich lohnen, dataGrid.SelectedValuePath = "Key" zu verwenden und dann zu dataGrid.SelectedValue statt SelectedItem beziehen.

+0

als KeyValuePair ist nicht Nullable Werttyp Ich kann es nicht verwenden in ** "((Absender als DataGrid) .SelectedItem als KeyValuePair )" ** –

+0

@AJAYKUMAR dann verwenden Sie eine direkte cast anstelle von 'as':' if (selectedItem ist KeyValuePair ) {var item = (KeyValuePair ) selectedItem; } ' – grek40

+0

@AJAYKUMAR sehe meine Bearbeitung über Nullable – grek40

2

sollte diese Arbeit:

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DataGrid dataGrid = sender as DataGrid; 
    if (dataGrid.SelectedItem != null) 
    { 
     var sample = (KeyValuePair<int, string>)dataGrid.SelectedItem; 
     int key = sample.Key; 
     string value = sample.Value; 
    } 
} 
+0

Warum hast du meine Antwort bearbeitet anstatt sie zu wählen? Beispiel ist ein KeyValuePair mit einem Schlüssel und einem Wert ... – mm8

+0

Ich würde vorschlagen, die Bearbeitung Rollback. Ich denke, AJAY arbeitete mit einer verwirrenden Mischung aus 'KeyValuePair' und seiner' Nullable' beim Editieren. – grek40

+0

@ grek40: Rollback bearbeiten. – mm8

Verwandte Themen