Prateek gsharma Ответов: 2

Я не получаю результат фильтра в datagridview


У меня есть
1)combobox, имеющий различные имена столбцов ,такие как id,Empid,Deptid
2)текстовое поле
3)datetimepicker1 & datetimepicker2

4) запустите кнопку fileter, используя выше 1,2,3
5)кнопка отдела использует только Datetimepickers


но я не получаю результатов...

Что я уже пробовал:

private void button1_Click(object sender, EventArgs e)
        {
            
                con2.Open();
                cmd = new OleDbCommand();
                da1 = new OleDbDataAdapter("select * from Finaldetails where (" + this.comboBox1.SelectedItem + ")  Like ('" + this.textBox1.Text + "') and  Date between '" + this.dateTimePicker1.Value.ToString("yyyy/MM/dd") + "' and '" + this.dateTimePicker2.Value.ToString("yyyy/MM/dd") + "' and Status = 'Approved'", con2);
                //cmd.Parameters.Add("@v1", OleDbType.VarChar , 100).Value = this.textBox1.Text;
                //cmd.Parameters.Add("@v2", OleDbType.DBDate).Value = this.dateTimePicker1.Value.ToString("yyyy/MM/dd");
                //cmd.Parameters.Add("@v3", OleDbType.DBDate).Value = this.dateTimePicker2.Value.ToString("yyyy/MM/dd");
                DataSet ds = new DataSet();
                da1.Fill(ds, "Finaldetails");
                dataGridView1.DataSource = ds.Tables["Finaldetails"];
                con2.Close();
}

private void button4_Click(object sender, EventArgs e)
        {
            //OleDbConnection con2 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Consoldetails.accdb");
           
            OleDbDataAdapter da1 = new OleDbDataAdapter("select * from Finaldetails where Date between '"+dateTimePicker1.Value.ToString("yyyy/MM/dd")+"' and '"+dateTimePicker2.Value.ToString("yyyy/MM/dd")+"' and Status = 'Approved'",con2);
            DataSet ds = new DataSet();
            da1.Fill(ds, "Finaldetails");
            dataGridView1.DataSource = ds.Tables["Finaldetails"];
            con2.Close();
        
}

2 Ответов

Рейтинг:
2

RickZeeland

Во первых вы могли бы попробовать использовать % подстановочный знак в предложении where:

Like ('%" + this.textBox1.Text + "%')

В противном случае вы можете попробовать объект DataTable.Выбрать() смотрите пример здесь: c# - фильтрация набора данных - переполнение стека[^]Вместо того, чтобы использовать предложение where в вашем:
da1 = new OleDbDataAdapter()
Вы могли бы использовать что-то вроде:
DataSet ds = new DataSet();
da1.Fill(ds, "Finaldetails");
var strExpr = "MyField LIKE '%" + this.textBox1.Text + "%' AND Date > #6/1/2001#";
var foundRows = ds.Table[0].Select(strExpr);
dataGridView1.DataSource = foundRows;


Prateek gsharma

не понял вас, Сэр.пожалуйста, объясните, как использовать это в моем коде?

Prateek gsharma

ВАР strExpr = "выбрать * из Finaldetails где ('"+это.поле со списком.элемент+"', и как '%" + это.текстовое поле textbox1.Текст + "%' и между '"+Это.Datetimepicker1.values.ToString("гггг/ММ/ДД")+" и "+это.Datetimepicker2.values.ToString("гггг/ММ/ДД")+"'";

RickZeeland

Это не сработает, это не полный синтаксис SQL, смотрите примеры здесь: https://www.dotnetperls.com/datatable-select

Рейтинг:
1

Wendelius

Если я правильно понял ваш вопрос, запрос не возвращает строки.

Если это так, поместите точку останова на

da1.Fill(ds, "Finaldetails");

Используя отладчик, исследуйте:
- Правильно ли выглядит запрос в da1.SelectCommand, см. Объект oledbdataadapter.Свойство SelectCommand (System.Data.Для oledb)[^]
- При выполнении заливки расследования, объект DataTable в dataset содержит каких-либо строк.

При необходимости вы можете пройти через эти учебники:
- Отладка в Visual Studio[^]
- Навигация по коду с помощью отладчика[^]

Кроме того, вы попробовали параметры, и как только вы получите запрос, работающий правильно, я предлагаю использовать параметры снова. На данный момент вы уязвимы для SQL-инъекций и делаете предположения о формате даты на стороне сервера.


Prateek gsharma

я использовал это, но все еще не получаю результатов.plz помогите мне написать какой-нибудь другой код для этого.

Wendelius

Вопрос в том, вернул ли запрос результаты? Когда вас казнили

и DA1.Заполнить(ДС, "Finaldetails");

Были ли какие-то строки в таблице данных? С помощью отладчика взгляните на

ds.таблица[0].строки

Prateek gsharma

запрос не возвращает результатов.

да, в datatable есть строки.

Wendelius

Простите, но я не совсем понимаю. Если запрос не возвращает результат, то как могут быть строки в таблице данных? В конце концов, вы заполняете datatable на основе запроса.

Если вы используете отладчик, то что такое запрос в da1.SelectCommand.Свойства commandtext?

А также что такое ds.Таблица[0].Строки.Рассчитывать?