2013-06-27 2 views
0

Как описано в теме, я пытаюсь добавить новую строку в мой Datagridview. В конструкторе формы я устанавливаю AllowUserToAddRows на false. Я все еще могу добавить строку программно, но, похоже, она не сохраняется в моем файле настроек.Программно добавлен DataGridViewRow потерян

Вот код моей формы - я оставил некоторые (надеюсь, не существенная) часть из: PS: обратите внимание на мой комментарий в конце моего btnAddEntry_Click() - метод

public DataSettings() 
    { 
     InitializeComponent(); 

     //Import rows that are saved int settings 
     for (int i = 0; i < Properties.Settings.Default.colNames.Count; i++) 
     { 
      dgv.Rows.Add(new DataGridViewRow()); 
      dgv.Rows[i].Cells[0].Value = Properties.Settings.Default.colNames[i]; 
      dgv.Rows[i].Cells[1].Value = Properties.Settings.Default.colStarts[i]; 
      dgv.Rows[i].Cells[2].Value = Properties.Settings.Default.colWidths[i]; 
     } 

     //Hide "new row"-row 
     dgv.AllowUserToAddRows = false; 
    } 

    private void cancel_Click(object sender, EventArgs e) 
    { 
     this.Dispose(); 
    } 

    private void save_Click(object sender, EventArgs e) 
    { 
     Properties.Settings.Default.colNames = new System.Collections.Specialized.StringCollection(); 
     Properties.Settings.Default.colStarts = new System.Collections.Specialized.StringCollection(); 
     Properties.Settings.Default.colWidths = new System.Collections.Specialized.StringCollection(); 
     foreach (DataGridViewRow row in dgv.Rows) 
     { 
      if (row.Index < dgv.Rows.Count - 1) 
      { 
       Properties.Settings.Default.colNames.Add((String)row.Cells[0].Value); 
       Properties.Settings.Default.colStarts.Add((String)row.Cells[1].Value); 
       Properties.Settings.Default.colWidths.Add((String)row.Cells[2].Value); 
      } 
     } 
     Properties.Settings.Default.Save(); 
     this.DialogResult = DialogResult.OK; 
    } 

    private void btnAddEntry_Click(object sender, EventArgs e) 
    { 
     dgv.AllowUserToAddRows = true; 
     Dialogs.Data_AddRow newRow = new Dialogs.Data_AddRow(); 
     newRow.ShowDialog(); 
     dgv.Rows.Add(new string[] { newRow.parmName, newRow.parmStart, newRow.parmWidth }); 
     newRow.Dispose(); 
     dgv.AllowUserToAddRows = false; //If I comment out this line - It works fine. 
             //but then the "newrow"-row is visible 
    } 

    private void btnDeleteEntry_Click(object sender, EventArgs e) 
    { 
     dgv.Rows.Remove(dgv.SelectedRows[0]); 
    } 

    private void btnDeleteAll_Click(object sender, EventArgs e) 
    { 
     dgv.Rows.Clear(); 
    } 

ответ

1

Вы теряете информация последней строки из-за этой строки: (row.Index < dgv.Rows.Count - 1) должен быть (row.Index < dgv.Rows.Count) или просто избавиться от него.

Если вы хотите проверить, если последняя строка не NewRow при сохранении этого:

foreach (DataGridViewRow row in dgv.Rows) 
{ 
    if (!row.IsNewRow) 
    { 
     Properties.Settings.Default.colNames.Add((String)row.Cells[0].Value); 
     Properties.Settings.Default.colStarts.Add((String)row.Cells[1].Value); 
     Properties.Settings.Default.colWidths.Add((String)row.Cells[2].Value); 
    } 
} 
+0

О мой бог: D - ТНХ кучу! Конечно! Если бы я только прокомментировал «-1» xD – Toastgeraet