簡體   English   中英

如何過濾 DataGridView?

[英]How can I filter a DataGridView?

我通過工具箱創建了一個簡單的DataGridView ,並通過向導從數據庫中選擇了數據(沒有代碼 in.cs 文件)。 它工作完美,如下圖所示:數據網格視圖1

現在我想按聯系人姓名過濾其中的條目。 我有一個文本框和搜索按鈕,因此當用戶輸入“聯系人姓名”(例如“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編碼的經驗,所以請詳細解釋。

謝謝大家回答了我的問題,非常感謝你的幫助。 你們是最有幫助的人。

我通過對我的代碼進行以下修改來解決了我的問題:

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

再次感謝你。

嘗試這個:

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

我希望我能很好地解決你的問題

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

您可以使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM