Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Фильтр DataGridView  [new]
pionersurg
Member

Откуда:
Сообщений: 16
имеется 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 дек 08, 16:12    [6551718]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр DataGridView  [new]
WYPMAH
Member

Откуда: USA
Сообщений: 1956
pionersurg
Не пойму как получить DataTable из dgv ?

всмысле?
DataTable является источником данных для DataGridView, поэтому в схеме:
1) DataTable → DataGridView искать тут DataGridView.DataSource
2) DataTable → BindingSource → DataGridView искать тут ((BindingSource)DataGridView.DataSource).DataSource
11 дек 08, 09:00    [6554274]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить