2009-03-25 11 views
5

Mam DataGridView związany przez datatable Mam pola wyboru do tego samego.Programowanie w pętli przez DatagridView i zaznaczenie pól wyboru

Chcę nawigować lub przechodzić przez datagridview i zaznacz te pola wyboru, Poniżej znajduje się składnia, której używam.

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

Czy pole wyboru jest powiązane z dowolnym polem w datatable? Czy może to być pole szablonu? Jeśli umieścisz swój znacznik, może być jaśniejszy – Macros

+0

Nie pole wyboru nie jest powiązane z żadnym polem dla opiekuna, ale na podstawie pewnej wartości muszę sprawdzić te wartości na datagrid –

Odpowiedz

2

Jeśli jest związany z DataTable, nie może pracować na modelu (tabela) zamiast? DataGridView to widok ...

Spróbuj zapętlić się nad wierszami w tabeli, ustawiając wartości. Na przykład (poniżej) - zauważ, że nie aktualizuje DataGridView - tylko DataTable:

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

Przykro mi. Nie rozumiem, jak mogę pracować na Model ? –

+0

Dziękuję Marcowi za kod, czy mogę wybrać wartość z pola kombi, które znajduje się w datagridview? –

+0

Jeśli jest to powiązane z danymi, to zmiana wartości * bound * również powinna to naprawić. –

1

coś wzdłuż linii:

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) .Roś Rząd nie ma właściwości, takich jak te wiersz? –

+0

Niestety, obsada była błędna. Poprawiłem powyższy kod. –

+0

Mam również comboBox w datagridView, a także chcesz ustawić go na pewną wartość? Jak to się robi? –

11

Następujące pracował dla mnie, to zaznaczone pola wyboru idealnie :)

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

Wiersz, dla którego wybrano jego wartość, nie zostanie przekazany do źródła danych, więc nie zostanie zapisany. źródłem danych jest DataCable. Jego problem z 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; } 
    } 
} 

Wygląda na to, że spełnia wszystkie wymagania. Jestem nowy na to wszystko, przepraszam, jeśli odpowiedziałem nieprawidłowo. Po prostu próbuje pomóc.

Powiązane problemy