2014-02-18 6 views
3

Ребята Я создал простой datagridview через панель инструментов и выбранные данные с помощью мастера (без кода в .cs-файле) из базы данных. Он работает безупречно, как вы можете видеть на рисунке ниже. DataGridView1Как фильтровать DataGridView в C# Win Forms?

Теперь я хочу отфильтровать записи в нем по имени контактного лица. У меня есть текстовое поле и кнопка поиска, поэтому, когда пользователь вводит «имя контактного лица», например «Altaf», а затем нажимает на поиск, gridview должен обновляться и должна появляться только запись с ticketid = 4.

Единственный код в файле .cs является: (он генерируется автоматически)

 private void Form2_Load(object sender, EventArgs e) 
    { 
     this.tblTicketDetailTableAdapter.Fill(this.sTDataSet1.tblTicketDetail); //auto-generated 
    } 

Я попробовал это в ButtonClick случае, как предложил кто-то, но он генерирует сообщение об ошибке: «Невозможно интерпретировать маркер„{“ в положении 27"

 BindingSource bs = new BindingSource(); 
     bs.DataSource = dataGridView1.DataSource; 
     bs.Filter = issuerNameDataGridViewTextBoxColumn + "like '%" + txtbxSearch.Text.Trim().Replace("'", "''") + "%'"; 
     dataGridView1.DataSource = bs.DataSource; 

у меня нет никакого опыта в DataGridViews или выиграть форма кодирования по этому вопросу, поэтому, пожалуйста, объясните подробно. Ваша помощь очень ценится.

С уважением.

+1

Вы не фильтруете DataGridView, вы фильтруете DataTable, к которому он привязан. –

+0

И как мне это сделать? Раньше я не использовал DataTable. –

+0

Вы используете DataTable: this.sTDataSet1.tblTicketDetail. Вызовите метод Select и привяжите результирующий объект к GridView. http://stackoverflow.com/questions/3362260/how-to-make-c-sharp-datatable-filter –

ответ

6

Спасибо всем, что ответил на мой вопрос, я действительно ценю вашу помощь, ребята. Вы, ребята, самая полезная группа.

я решил мою проблему, выполнив следующие изменения в мой код:

public void btnSearch_Click(object sender, EventArgs e) 
    { 
     BindingSource bs = new BindingSource(); 
     bs.DataSource = dataGridView1.DataSource; 
     bs.Filter = dataGridView1.Columns[5].HeaderText.ToString() + " LIKE '%" + txtbxSearch.Text + "%'"; 
     dataGridView1.DataSource = bs; 
    } 

Еще раз спасибо.

1

Я надеюсь, что я получил вашу проблему хорошо

string whereClause = "ContactPerson=" +textbox.text; 
(datagridview.DataSource as DataTable).DefaultView.RowFilter = whereClause; 
+0

Генерирует ошибку: Ссылка на объект не установлена ​​в экземпляр объекта. –

+0

@Shajee Afzal: как вы установили datagridview datasource? – nnmmss

+0

Я уже упомянул в своем OP, что gridview был создан через мастера, я не делал никакого ручного кодирования. Я понятия не имею, как установить datasridview datasource вручную. –

5

Попробуйте это:

foreach (System.Windows.Forms.DataGridViewRow r in MyGridView.Rows) 
{ 
     if ((r.Cells[5].Value).ToString().ToUpper().Contains(searchText.ToUpper())) 
     { 
      MyGridView.Rows[r.Index].Visible = true; 
      MyGridView.Rows[r.Index].Selected = true; 
     } 
     else 
     { 
      MyGridView.CurrentCell = null; 
      MyGridView.Rows[r.Index].Visible = false; 
     } 
} 
+0

Он работает нормально, но когда я дважды нажимаю кнопку - он отображает все строки в datagridview. –

+0

Я сам это проверил. Но это не вызвало никаких проблем. Используйте точки останова и проверяйте каждую линию. –

Смежные вопросы