2016-12-02 6 views
0

Ich importiere eine Textdatei in einen DGV, die Textdatei enthält eine Liste von ungeordneten Werten. Ich habe auch ein Textfeld, in das ich einen Wert eingeben und es zeigt die Anzahl der Werte an, die ich in der DGV angegeben habe. Ich habe auch einen Knopf, der die Werte in der DGV sortiert, was alles gut funktioniert. Meine Frage ist, wie setze ich die DGV zurück, wo sie ungeordnet sind? dies ist der Ansatz, den ich versuchte:Reset DataGridView

private void resetButton_Click(object sender, EventArgs e) 
{ 
    mergeSortButton.Enabled = true; 
    quickSortButton.Enabled = true; 
    selectionSortButton.Enabled = true; 
    displayDGV.Rows.Clear(); 
    displayDGV.Refresh(); 

    if (File.Exists(DATA_FILE_NAME)) 
    fileIn = File.OpenText(DATA_FILE_NAME); 
    else 
    { 
    MessageBox.Show(DATA_FILE_NAME + " does not exist", "Abort Execution", 
        MessageBoxButtons.OK, MessageBoxIcon.Error); 
    return; 
    } 
    if (listCountTextBox.ReadInt(out index)) 
    for (int i = 1; i <= index; i++) 
     idList.Add(Int32.Parse(fileIn.ReadLine().Replace("-", ""))); 
    fileIn.Close(); 
    DisplayIDList(displayDGV); 

} 

Ich dachte ich nur die DGV löschen konnte und die Werte wieder in den DGV importieren. Wahrscheinlich nicht der beste Ansatz, aber es funktioniert nicht einmal für mich. Ich bin gerade dabei, C# zu lernen. Jede Einsicht wäre großartig!

Vielen Dank!

Antwort

0

Um die txt-Datei in das Datenraster laden Sie es zunächst zu einer Listbox laden können z.B. listBox1 und dann zu einer DataTable. Das Datagrid kann die DataTable als seine DataSource verwenden. Sie können dann angeben, wie viele Zahlen Ihr Raster anzeigen soll. Als Beispiel können Sie den folgenden Code verwenden:

private void resetButton_Click(object sender, EventArgs e) 
    { 

     //........ 
     StreamReader fileIn; 
     displayDGV.DataSource = null; 
     displayDGV.Rows.Clear(); 
     displayDGV.Refresh(); 
     displayDGV.EditMode = DataGridViewEditMode.EditProgrammatically; 
     string DATA_FILE_NAME = "C:\\Dgvnums.txt";//e.g. a sample name 
     if (File.Exists(DATA_FILE_NAME)) 
      fileIn = File.OpenText(DATA_FILE_NAME); 
     else 
     { 
      MessageBox.Show(DATA_FILE_NAME + " does not exist", "Abort Execution", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
      return; 
     } 
     int lincnt = 0; 
     string teststr = "";//the following counts the Lines included in the txt file 
     while (!fileIn.EndOfStream) 
     { 
      teststr = fileIn.ReadLine(); 
      if (teststr != "") 
      { 
       lincnt++; 
      } 
     } 
     fileIn.Close(); 
     int index = int.Parse(textBox1.Text.ToString()); 
     if (index > lincnt) 
     { 
      MessageBox.Show("THE FILE CONTAINS LESS NUMBERS THAN YOU HAVE SPECIFIED"); 
      return; 
     } 
     fileIn = File.OpenText(DATA_FILE_NAME); 
     listBox1.Items.Clear();//the folloing loads the numbers in the listBox1 
     for (int i = 1; i <= index; i++) 
     { 
      string toreadstr = fileIn.ReadLine(); 
      if (toreadstr.Contains("-")) 
      { 
       toreadstr = toreadstr.Replace("-", ""); 
      } 
      listBox1.Items.Add(Int32.Parse(toreadstr)); 
     } 
     fileIn.Close(); 
     DataTable mytab = new DataTable(); 
     mytab.Columns.Add(); 
     for (int i = 0; i < index; i++) 
     { 
      object[] numbr = new object[1]; 
      numbr[0] = new object(); 
      numbr[0] = (object)listBox1.Items[i]; 
      mytab.LoadDataRow(numbr, true); 
     } 
     displayDGV.DataSource = mytab; 
     displayDGV.Columns[0].HeaderText = "Mynumbers"; 
     displayDGV.AllowUserToAddRows = false; 
     displayDGV.Refresh(); 
    } 

Ich hoffe, diese Hilfe.

+0

Sehr hilfreich, danke! – Luke

0

Filtern Sie nicht Ihr ursprüngliches Modell. mache stattdessen einen zweiten und filtere das. Pseudo-Code, wenn man so will ...

if (No Filter applied) 
{ 
    ApplyToDG(originalModel) 
} 
else 
{ 
    newModel = originalModel; 
    ApplyFilterTo(newModel); 
    ApplyToDG(newModel); 
}