2016-12-02 12 views
0

DGVにテキストファイルをインポートしていますが、テキストファイルには順序付けられていない値のリストが含まれています。私は値を入力するテキストボックスを持っており、指定した値の数をDGVに表示します。私はDGVの値をソートするボタンも持っています。これらのボタンはすべてうまくいきます。私の質問は、どのように私はDGVをどこに戻していないのかをリセットするのですか?これは私が試みたアプローチです: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); 

} 

DGVをクリアして値をDGVに戻すことができました。おそらく最善のアプローチではありませんが、それは私のために働いていません。私はまだC#を学んでいます。どんな洞察も素晴らしいだろう!

ありがとうございました!

答えて

0

txtファイルをデータグリッドにロードするには、最初にリストボックスにロードすることができます。 listBox1、次にDataTableに移動します。 DataGridはDataTableをDataSourceとして使用できます。グリッドに表示される数値の数を指定することができます。上記の場合、例として次のコードを使用することができます。

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(); 
    } 

これらのヘルプが必要です。

+0

非常に参考になりました、ありがとうございます! – Luke

0

元のモデルをフィルタリングしないでください。代わりに2番目のフィルタを作成してフィルタします。擬似コード...

if (No Filter applied) 
{ 
    ApplyToDG(originalModel) 
} 
else 
{ 
    newModel = originalModel; 
    ApplyFilterTo(newModel); 
    ApplyToDG(newModel); 
} 
関連する問題