2016-12-07 5 views
0

Итак, я пытаюсь передать данные из DataGridView в другой, используя CheckBox в столбце, чтобы выбрать столбцы, которые я хочу передать. Но с кодом, который я уже получил, я могу передать один. Я хочу выбрать еще один и передать его другому DataGridView.Передайте данные datagridview другому datagridview в C#

Это код, у меня есть:

private void cmdCopy_Click(object sender, EventArgs e) 
{ 
    frmRecycle frm = new frmRecycle(); 
    frm.dataGridView2.Rows.Clear(); 
    foreach (DataGridViewRow dtrow in dataGridView1.Rows) 
    { 
     if ((bool)dtrow.Cells[0].Value == true) 
     { 
      int n = frm.dataGridView2.Rows.Add(); 
      frm.dataGridView2.Rows[n].Cells[0].Value = true; 
      frm.dataGridView2.Rows[n].Cells[1].Value = dtrow.Cells[1]; 
      frm.dataGridView2.Rows[n].Cells[2].Value = dtrow.Cells[2].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[3].Value = dtrow.Cells[3].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[4].Value = dtrow.Cells[4].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[5].Value = dtrow.Cells[5].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[6].Value = dtrow.Cells[6].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[7].Value = dtrow.Cells[7].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[8].Value = dtrow.Cells[8].Value.ToString(); 
      frm.dataGridView2.Rows[n].Cells[9].Value = dtrow.Cells[9].Value.ToString(); 

      con = new SqlConnection(cs.DBConn); 
      con.Open(); 

      string queryInsert = @"INSERT INTO SentRecyle(FileName, TypeFile, SizeFile, PathFile, 
            Created, Modified, Access, PcName) 
            VALUES (@FileName, @TypeFile, @SizeFile, @PathFile, 
            @Created, @Modified, @Access, @PcName)"; 
      cmd = new SqlCommand(queryInsert); 
      cmd.Connection = con; 

      cmd.Parameters.Add(new SqlParameter("@FileName", SqlDbType.NVarChar, 150, "FileName")); 
      cmd.Parameters.Add(TypeFileSqlParameter("@TypeFile", SqlDbType.NVarChar, 150, "TypeFile")); 
      cmd.Parameters.Add(new SqlParameter("@SizeFile", SqlDbType.Int, 20, "SizeFile")); 
      cmd.Parameters.Add(new SqlParameter("@PathFile", SqlDbType.NVarChar, 150, "PathFile")); 
      cmd.Parameters.Add(new SqlParameter("@Created", SqlDbType.NVarChar, 150, "Created")); 
      cmd.Parameters.Add(new SqlParameter("@Modified", SqlDbType.NVarChar, 150, "Modified")); 
      cmd.Parameters.Add(new SqlParameter("@Access", SqlDbType.NVarChar, 150, "Access")); 
      cmd.Parameters.Add(new SqlParameter("@PcName", SqlDbType.NVarChar, 50, "PcName")); 

      cmd.Parameters["@FileName"].Value = dtrow.Cells[2].Value.ToString(); 
      cmd.Parameters["@TypeFile"].Value = dtrow.Cells[3].Value.ToString(); 
      cmd.Parameters["@SizeFile"].Value = dtrow.Cells[4].Value.ToString(); 
      cmd.Parameters["@PathFile"].Value = dtrow.Cells[5].Value.ToString(); 
      cmd.Parameters["@Created"].Value = dtrow.Cells[6].Value.ToString(); 
      cmd.Parameters["@Modified"].Value = dtrow.Cells[7].Value.ToString(); 
      cmd.Parameters["@Access"].Value = dtrow.Cells[8].Value.ToString(); 
      cmd.Parameters["@PcName"].Value = dtrow.Cells[9].Value.ToString(); 

      cmd.ExecuteNonQuery(); 

      con.Close(); 

      con = new SqlConnection(cs.DBConn); 
      con.Open(); 
      int AffectedRows = 0; 
      string queryDelete = "DELETE FROM InfoFile WHERE FileName='" + dtrow.Cells[2].Value.ToString() + "'"; 
      cmd = new SqlCommand(queryDelete); 
      cmd.Connection = con; 

      AffectedRows = cmd.ExecuteNonQuery(); 

      if (AffectedRows > 0) 
      { 
       ShowDataGridView(); 
      } 
      else 
      { 
       MostrarDataGridView(); 
       MessageBox.Show("There are no records!", "Try again", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      if (con.State == ConnectionState.Open) 
      { 
       con.Close(); 
      } 
     } 
    } 
} 

У меня есть это на моем DataGridView:

if ((bool)dataGridView1.SelectedRows[0].Cells[0].Value == false) 
{ 
    dataGridView1.SelectedRows[0].Cells[0].Value = true; 
} 
else 
{ 
    dataGridView1.SelectedRows[0].Cells[0].Value = false; 
} 

Я хотел бы, чтобы была возможность пройти более одной строки. Вы, ребята, знаете, как я могу это решить?

+0

Используйте источник данных и отправить строк данных или использовать фильтр, где проверяются/помечено/выбранные строки отображаются в другом – Plutonix

+0

мы можем говорить об этом через чат? @Plutonix – LeugimSnitram

ответ

0

Когда вы говорите более одной строки, я предполагаю, что вы запрашиваете больше, чем выбранную строку, что будет означать коллекцию datarows или объект griddata, который является источником данных. Я бы скопировал либо коллекцию, либо источник данных и передал это.

Таким образом, вы могли бы пройти всю сетку из источника привязки, как так

private void PassCustomersDataGridView_DoubleClick(object sender, EventArgs e) 
    { 
     System.Data.DataRowView SelectedRowView; 
     NorthwindDataSet.CustomersRow SelectedRow; 

     SelectedRowView = (System.Data.DataRowView)customersBindingSource.Current; // selected row 
     SelectedRow = (NorthwindDataSet.CustomersRow)SelectedRowView.Row; 

     // do something like this pass data source, 
     // and then convert it back to what you the correct type at the other side 
     GridData = (System.Data)customersBindingSource; 

     // Form2 OrdersForm = new Form2(); 
     /// set your passed in data source here 
     // OrdersForm.LoadOrders(SelectedRow.CustomerID); 
     // OrdersForm.Show(); 
    } 
Смежные вопросы