2016-04-07 3 views
0

das eigentliche Problem ist ich möchte Datenraster Ansicht abhängig von Combo-Box-Wert zu füllen, aber ich möchte den Wert in der Rasteransicht halten, wenn ich auf einen Wert in klicken Kombinationsfeld. aber in meinem Code, wenn ich einen Wert von Kombinationsfeld auswählen zeigt es in der Grid-Ansicht, aber ich nächsten Wert klicken, um es nächsten Wert zeigt aber älter man nicht in der Rasterdarstellung bleiben, bin so bitte leite mich gründlich TnanksFügen Sie Zeilen weise Daten in Datenraster Ansicht in Abhängigkeit von dem Wert von Cmbo Box

 private void Display_Load(object sender, EventArgs e) 
     { 
    string str = "SELECT i_id, i_name FROM sales";   
    comboBox1.DataSource = getData(str);  
    comboBox1.DisplayMember = "i_name"; 
    comboBox1.ValueMember = "i_id"; 
} 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int val; 
    Int32.TryParse(comboBox1.SelectedValue.ToString(), out val); 
    string str = "SELECT i_id, i_name, qty, rate,discount FROM sales WHERE i_id = " + val; 
    dataGridView1.DataSource = getData(str); 
} 
+0

Mögliche Duplikate von [Add Zeilen weise Daten in der Datenraster Ansicht abhängig von der Wert von Cmbo Box.] (http://stackoverflow.com/questions/36469 076/add-rows-weises-daten-im-datengitter-ansicht-abhängig vom-wert-von-cmbo-box) – Panda

Antwort

0

In der Zeile

dataGridView1.DataSource = getData(str);

Sie ersetzen die Datasource des Datagrid.

Sie müssen diese Zeile durch Hinzufügen des Ergebnisses der Methode getData in die DataSource - Add a Row After Setting DataSource to Datagridview ersetzen.

Etwas wie folgt aus:

public partial class MyWindow 
{ 
    BindingList<Data_Type> list = new BindingList<Data_Type>(); 

    private void Display_Load(object sender, EventArgs e) 
    { 
     string str = "SELECT i_id, i_name FROM sales"; 
     comboBox1.DataSource = getData(str); 
     comboBox1.DisplayMember = "i_name"; 
     comboBox1.ValueMember = "i_id"; 

     dataGridView1.DataSource = list; 
    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     int val; 
     Int32.TryParse(comboBox1.SelectedValue.ToString(), out val); 
     string str = "SELECT i_id, i_name, qty, rate,discount FROM sales WHERE i_id = " + val; 

     var newData = getData(str); 
     foreach (var line in newData) 
     { 
      list.Add(line); 
     } 
    } 
} 

Da diese verwendet eine BindingList<T> auf der Steuerung in Abhängigkeit Sie verwenden, sollte dies nur die neuen Daten in den bereits angezeigten Elemente hinzuzufügen.

+0

konnte es nicht bekommen – ehsanulhaq

+0

Die Antwort wurde aktualisiert, so dass es ein detailliertes Beispiel zeigt. –

0

Warum sollten die älteren Werte im Speicher bleiben, wo speichern/speichern Sie sie, Moment, wenn Sie das DataGridView erneut binden, es ist weg, wenn Sie es wieder im Speicher/Cache speichern und verwenden möchten.

Ich würde vorschlagen, die folgende:

haben nur ein Sql query für beide Combo-box und Datagrid view, das wäre:

SELECT i_id, i_name, qty, rate,discount FROM sales 

Shop das Ergebnis (Datatable) in der in Speicherbehälter und verwenden, die für Getting filtered value for binding und Sie haben alle Daten, die Sie brauchen im Speicher

+0

Wie kann ich es im Speicher speichern, um es erneut zu verwenden? Kannst du ein Beispiel teilen? – ehsanulhaq

+0

Erstellen Sie eine Klassenvariable, um eine Liste zu speichern oder den Systemlaufzeitcache zu verwenden. Die Idee bleibt, dass Informationen während der Ausführung des Programms gespeichert werden und Sie diese Informationen für die weitere Verarbeitung verwenden –

Verwandte Themen