|
|
|
Фильтр DataGridView
|
|||
|---|---|---|---|
|
#18+
имеется DataGridView c загруженными данными using (cn = new SqlConnection(Form1.ConnectionString)) { try { DataSet ds = new DataSet(); DataAdapter da = new SqlDataAdapter("SELECT * from XXX", cn); da.Fill(ds); DataTable dt = ds.Tables[0]; dgv.DataSource = dt; } catch (SqlException ex) { MessageBox.Show(ex.Message.ToString()); } } Добавляем DataGridView для фильтров public void CreateDGVFilter() { //CheckBox фильтр активен/не активен DataGridViewCheckBoxColumn checkboxColumn = new DataGridViewCheckBoxColumn(); dataGridView1.Columns.Add(checkboxColumn); dataGridView1.Rows[0].Cells[0].Value = Convert.ToBoolean(false); //ComboBox по какому столбцу фильтровать DataGridViewComboBoxColumn FieldColumn = new DataGridViewComboBoxColumn(); FieldColumn.HeaderText = "Поле"; dataGridView1.Columns.Add(FieldColumn); load_ds_fields_column(FieldColumn); //ComboBox DataGridViewComboBoxColumn UslColumn = new DataGridViewComboBoxColumn(); UslColumn.HeaderText = "Условие"; UslColumn.Items.Add("LIKE"); UslColumn.Items.Add("="); dataGridView1.Columns.Add(UslColumn); //TextBox DataGridViewTextBoxColumn FilterValueColumn = new DataGridViewTextBoxColumn(); FilterValueColumn.HeaderText = "Значение фильтра"; dataGridView1.Columns.Add(FilterValueColumn); } Заполняю ComboBox столбцами имеющегося DataGridView dgv public void load_ds_fields_column(DataGridViewComboBoxColumn cb) { for (int i = 0; i < dt.Columns.Count; i++) { cb.Items.Add(dt.Columns[i].ColumnName); } } //формируем строку фильтрации private void button3_Click(object sender, EventArgs e) { Filter = "1=1 "; for (int i = 0; i < dataGridView1.Rows.Count; i++) { if ((dataGridView1.Rows[i].Cells[0].Value != null) && ((bool)dataGridView1.Rows[i].Cells[0].Value) && (dataGridView1.Rows[i].Cells[1].Value != null) && (dataGridView1.Rows[i].Cells[2].Value != null) && (dataGridView1.Rows[i].Cells[3].Value != null)) { if (dataGridView1.Rows[i].Cells[2].Value.ToString() == "LIKE") { Filter += "AND " + dataGridView1.Rows[i].Cells[1].Value + " " + dataGridView1.Rows[i].Cells[2].Value + " '%" + dataGridView1.Rows[i].Cells[3].Value + "%' "; } if (dataGridView1.Rows[i].Cells[2].Value.ToString() == "=") { Filter += "AND " + dataGridView1.Rows[i].Cells[1].Value + " " + dataGridView1.Rows[i].Cells[2].Value + dataGridView1.Rows[i].Cells[3].Value + " "; } } } ApplyFilterTo(Filter); } //применяем фильтр public void ApplyFilterTo(string Filter) { DataRow[] rows = ds.Tables[0].Select(Filter); DataTable dt_select = new DataTable(); //создание структуры for (int i = 0; i < dt.Columns.Count; i++) { dt_select.Columns.Add(dt.Columns[i].ColumnName, dt.Columns[1].DataType); } foreach (DataRow drow in rows) { dt_tech_select.ImportRow(drow); } dgv.DataSource = dt_select; } Всё работает, НО правильней было бы написать ApplyFilterTo(string Filter, DataGridView dgv) - применяем фильтр к соот DataGridView... Не пойму как получить DataTable из dgv ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2008, 16:12 |
|
||
|
Фильтр DataGridView
|
|||
|---|---|---|---|
|
#18+
pionersurgНе пойму как получить DataTable из dgv ? всмысле? DataTable является источником данных для DataGridView , поэтому в схеме: 1) DataTable → DataGridView искать тут DataGridView.DataSource 2) DataTable → BindingSource → DataGridView искать тут ((BindingSource)DataGridView.DataSource).DataSource ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 09:00 |
|
||
|
|

start [/forum/topic.php?fid=17&tid=1352034]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
96ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 424ms |

| 0 / 0 |
