2009-03-25 32 views
5

Tengo DataGridView vinculado por una tabla de datos. Tengo casillas de verificación con el mismo.Programemente recorro un DatagridView y marque las casillas de verificación

Quiero navegar o recorrer la vista de cuadro de datos y marcar estas casillas de verificación. A continuación se muestra la sintaxis que uso.

foreach(DataGridViewRow dr in dgvColumns.Rows) 
{ 
    DataGridViewCheckBoxCell checkCell = 
     (DataGridViewCheckBoxCell)dr.Cells["CheckBoxes"]; 
    checkCell.Value=1; 
    //Also tried checkCell.Selected=true; 
    //Nothing seems to have worked.! 
} 
+0

¿La casilla de verificación está relacionada con cualquiera de los campos en la tabla de datos? ¿Podría ser esto un campo de plantilla en su lugar ?. Si publica su marcado, puede ser más claro – Macros

+0

No, la casilla de verificación no está relacionada con ningún otro campo, pero en función de algún valor, necesito verificar estos valores en la cuadrícula de datos –

Respuesta

2

Si se une a una DataTable, puede que no funcione en el modelo (la mesa) en su lugar? El DataGridView es una vista ...

Intente hacer un bucle sobre las filas de la tabla, estableciendo los valores. Por ejemplo (abajo) - en cuenta que no actualizo el DataGridView - sólo el DataTable: Algo

using System; 
using System.Data; 
using System.Windows.Forms; 

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Name", typeof(string)); 
     table.Columns.Add("Selected", typeof(bool)); 
     table.Rows.Add("Fred", false); 
     table.Rows.Add("Jo", false); 
     table.Rows.Add("Andy", true); 

     Button btn = new Button(); 
     btn.Text = "Select all"; 
     btn.Dock = DockStyle.Bottom; 
     btn.Click += delegate 
     { 
      foreach (DataRow row in table.Rows) 
      { 
       row["Selected"] = true; 
      } 
     }; 

     DataGridView grid = new DataGridView(); 
     grid.Dock = DockStyle.Fill; 
     grid.DataSource = table; 

     Form form = new Form(); 
     form.Controls.Add(grid); 
     form.Controls.Add(btn); 
     Application.Run(form); 
    } 
} 
+0

Lo siento. No entiendo cómo puedo trabajar en el modelo? –

+0

Gracias Marc por su código. ¿Es posible para mí seleccionar un valor del cuadro combinado que se encuentra en la vista de cuadro de datos? –

+0

Si está enlazado a datos, entonces cambiar el valor * bound * también debería arreglar esto, creo. –

1

lo largo de las líneas de:

foreach(DataGridViewRow dgvr in dgvColumns.Rows) 
{ 
    // Get the underlying datarow 
    DataRow dr = ((DataRowView)dgvr.DataBoundItem).Row; 

    // Update the appropriate column in the data row. 
    // Assuming this is your column name in your 
    // underlying data table 
    dr["CheckBoxes"] = 1; 
} 
+0

((DataGridRowView) dgvr.DataBoundItem) .Row Row no hay ninguna propiedad como te row? –

+0

Lo siento, el elenco fue incorrecto. He modificado el código anterior. –

+0

También tengo un comboBox en el datagridView y también quiero establecerlo en algún valor? ¿Cómo se hace eso? –

11

Los siguientes trabajado para mí, que la revise las casillas de verificación perfectamente :)

foreach (DataGridViewRow row in dgvDataGridView.Rows) 
{ 
    ((DataGridViewCheckBoxCell)row.Cells[0]).Value = true; 
} 
1

la fila que está seleccionada su valor no se deje pasó a la fuente de datos subyacente así que no se salvó. el origen de datos es Datatable. Su problema de datagridview.

0
using System.Collections.Generic; 
using System.Windows.Forms; 

namespace FindTheCheckedBoxes 
{ 
    public partial class Form1 : Form 
    { 
     List<TestObject> list = new List<TestObject>(); 

     List<int> positionId = new List<int>(); 

     public Form1() 
     { 
      InitializeComponent(); 
      PopulateDataGrid(); 

      foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       if ((bool)row.Cells[0].Value == true) 
        positionId.Add((int)row.Cells[1].Value); 
      } 

      // sets the window title to the columns found ... 
      this.Text = string.Join(", ", positionId); 
     } 
     void PopulateDataGrid() 
     { 
      list.Add(new TestObject { tick = false, LineNum = 1 }); 
      list.Add(new TestObject { tick = true, LineNum = 2 }); 
      list.Add(new TestObject { tick = false, LineNum = 3 }); 
      list.Add(new TestObject { tick = true, LineNum = 4 }); 

      dataGridView1.DataSource = list; 
     } 
    } 
    class TestObject 
    { 
     public bool tick { get; set; } 
     public int LineNum { get; set; } 
    } 
} 

Parece que hace lo que necesita. Soy nuevo en todo esto, lo siento mucho si he respondido incorrectamente. Sólo trato de ayudar.

Cuestiones relacionadas