1. 程式人生 > WINDOWS開發 >DataGridView怎樣完成新增、刪除、上移、下移一行

DataGridView怎樣完成新增、刪除、上移、下移一行

  場景
  在Winform中使用DataGridView完成增加一行、刪去一行、上移一行、下移一行
  完成
  增加一行
  private void TaskViewEditHelper_OnAddStep(object sender,EventArgs e)
  {
  DataGridViewRow dr = new DataGridViewRow();
  dr.CreateCells(this.dataGridView_Task_ViewEdit);
  dr.Cells[0].Value = "公眾號" + this.dataGridView_Task_ViewEdit.Rows.Count;

  dr.Cells[1].Value = "林口";
  dr.Cells[2].Value = "很多程式設計教程與資源";
  //this.dataGridView_Task_ViewEdit.Rows.Insert(0,dr); //增加的行作為榜首行
  this.dataGridView_Task_ViewEdit.Rows.Add(dr);//增加的行作為末了一行
  }
  刪去一行
  private void TaskViewEditHelper_OnRemoveStep(object sender,EventArgs e)
  {
  if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == 0)
  {
  XtraMessageBox.Show("請先挑選刪去步,單擊榜首列以選中行");
  }
  else
  {
  if (XtraMessageBox.Show("確定要刪去選中步嗎?") == System.Windows.Forms.DialogResult.OK)
  {
  foreach (DataGridViewRow dr in this.dataGridView_Task_ViewEdit.SelectedRows)
  {
  if (dr.IsNewRow == false)
  {
  //假設不是已提交的行,默許情況下在增加一行資料成功後,DataGridView為新建一行作為新資料的刺進位置
  this.dataGridView_Task_ViewEdit.Rows.Remove(dr);
  }
  }
  }
  }
  }
  上移一行
  private void TaskViewEditHelper_OnUpStep(object sender,EventArgs e)
  {
  if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == 0)
  {
  XtraMessageBox.Show("請先挑選一行,單擊榜首列以選中行");
  }
  else
  {
  if (this.dataGridView_Task_ViewEdit.SelectedRows[0].Index <= 0)
  {
  XtraMessageBox.Show("此行已在頂端,不能再上移!");
  }
  else
  {
  //留心:這兒好壞繫結命據情況的上移行
  // 挑選的行號
  int selectedRowIndex = GetSelectedRowIndex(this.dataGridView_Task_ViewEdit);
  if (selectedRowIndex >= 1)
  {
  // 仿製選中的行
  DataGridViewRow newRow = dataGridView_Task_ViewEdit.Rows[selectedRowIndex];
  // 刪去選中的行
  dataGridView_Task_ViewEdit.Rows.Remove(dataGridView_Task_ViewEdit.Rows[selectedRowIndex]);
  // 將仿製的行,刺進到選中的上一行位置
  dataGridView_Task_ViewEdit.Rows.Insert(selectedRowIndex - 1,newRow);
  dataGridView_Task_ViewEdit.ClearSelection();
  // 選中開始選中的行
  dataGridView_Task_ViewEdit.Rows[selectedRowIndex - 1].Selected = true;
  }
  }
  }
  }
  注:
  這兒是沒繫結命據源情況下的上移一行,增加的一行時經過是上面新增的辦法完成的。

  此刻dataGridView的dataSource是為空的。

  此中用到獲取選中行的辦法:

  private int GetSelectedRowIndex(DataGridView dgv)
  {
  if (dgv.Rows.Count == 0)
  {
  return 0;
  }
  foreach (DataGridViewRow row in dgv.Rows)
  {
  if (row.Selected)
  {
  return row.Index;
  }
  }
  return 0;
  }
  作用
  下移一行
  private void TaskViewEditHelper_OnDownStep(object sender,EventArgs e)
  {
  if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == 0)
  {
  XtraMessageBox.Show("請先挑選一行,單擊榜首列以選中行");
  }
  else
  {
  if (this.dataGridView_Task_ViewEdit.SelectedRows[0].Index >= this.dataGridView_Task_ViewEdit.Rows.Count - 1)
  {
  XtraMessageBox.Show("此行已在底端,不能再下移!");
  }
  else
  {
  int selectedRowIndex = GetSelectedRowIndex(this.dataGridView_Task_ViewEdit);
  if (selectedRowIndex < dataGridView_Task_ViewEdit.Rows.Count - 1)
  {
  // 仿製選中的行
  DataGridViewRow newRow = dataGridView_Task_ViewEdit.Rows[selectedRowIndex];
  // 刪去選中的行
  dataGridView_Task_ViewEdit.Rows.Remove(dataGridView_Task_ViewEdit.Rows[selectedRowIndex]);
  // 將仿製的行,刺進到選中的下一行位置
  dataGridView_Task_ViewEdit.Rows.Insert(selectedRowIndex + 1,newRow);
  dataGridView_Task_ViewEdit.ClearSelection();
  // 選中開始選中的行
  dataGridView_Task_ViewEdit.Rows[selectedRowIndex + 1].Selected = true;
  }
  }
  }
  }