winforms 如何筛选DataGridView?

myzjeezk  于 2022-11-17  发布在  其他
关注(0)|答案(4)|浏览(2554)

我已经通过工具箱创建了一个简单的DataGridView,并通过向导从数据库中选择了数据(.cs文件中没有代码)。它运行得非常完美,如下图所示:

现在我想按联系人姓名过滤其中的条目。我有一个文本框和搜索按钮,因此当用户输入“联系人姓名”(如“Altaf”),然后单击搜索时,GridView应该会刷新,只有带有ticketid=4的条目才会出现。
.cs文件(自动生成)中的唯一代码是:

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

我按照某人的建议在ButtonClick事件中尝试了此操作,但它生成了以下错误:"Cannot interpret token '{' at position 27"

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

我没有DataGridViews或WinForms编码的经验,所以请详细解释。

lymnna71

lymnna711#

谢谢大家回答我的问题,我真的很感谢你们的帮助伙计们。你们是最有帮助的一群。
我通过对代码进行以下修改解决了问题:

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;
    }

再次感谢您的评分

ktecyv1j

ktecyv1j2#

试试看:

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;
      }
 }
nhjlsmyf

nhjlsmyf3#

我希望我能解决你的问题

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

taor4pac4#

如果没有数据源,可以使用dataGridView1.Rows[iIndex].Visible来过滤dataGridView。但是如果启用了列宽的AutoSizeMode,这可能会非常慢。(至少我遇到了这个问题)。
解决方法是暂时关闭AutoSizeMode,这样过滤速度会很快:

for (int z = 0; z < dataGridView1.Columns.Count; z++)
{ // Disabled AutoSize Mode for all columns
  dataGridView1.Columns[iRow].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
}

for (int iRow = 0; iRow <= dataGridView1.RowCount; iRow++)
{ // Filtering dataGridView1
  bool bVisibleCondition = ...
  dataGridView1.Rows[iRealRow].Visible = bVisibleCondition;
}

for (int z = 0; z < dataGridView1.Columns.Count; z++)
{ // Enable AutoSize Mode for all columns
  dataGridView1.Columns[z].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}

相关问题