powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Фильтр DataGridView
2 сообщений из 2, страница 1 из 1
Фильтр DataGridView
    #35705921
pionersurg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имеется 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 ?
...
Рейтинг: 0 / 0
Фильтр DataGridView
    #35707187
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pionersurgНе пойму как получить DataTable из dgv ?
всмысле?
DataTable является источником данных для DataGridView , поэтому в схеме:
1) DataTable → DataGridView искать тут DataGridView.DataSource
2) DataTable → BindingSource → DataGridView искать тут ((BindingSource)DataGridView.DataSource).DataSource
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Фильтр DataGridView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]