C# 如何在从excel文件导入的datagridview中筛选列

C# 如何在从excel文件导入的datagridview中筛选列,c#,.net,filter,C#,.net,Filter,例如,我有一个datagridview1,其中包含从excel文件导入的数据,共有12列:日期、名称、活动、项目、时间、注释等。和1000排。 我想做的是只过滤Project列中具有项目名称的所有项目。 例如,我支持(Projectname),我想显示所有按支持行筛选的列 我有一个组合框来选择我需要在这里过滤的列(例如Project), 我试过使用这个代码,但它不起作用 private void ComboBox1_SelectedIndexChanged(object sender, Ev

例如,我有一个datagridview1,其中包含从excel文件导入的数据,共有12列:日期、名称、活动、项目、时间、注释等。和1000排。 我想做的是只过滤Project列中具有项目名称的所有项目。 例如,我支持(Projectname),我想显示所有按支持行筛选的列

我有一个组合框来选择我需要在这里过滤的列(例如Project), 我试过使用这个代码,但它不起作用

  private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
  {
    string projektItem = comboBox1.Items[comboBox1.SelectedIndex].ToString();
    if (projektItem == "Project") {
        foreach (DataRow dataRow in dataGridView1.Rows)
        {
            StringBuilder filter = new StringBuilder();

            for (int i = 0; i < dataGridView1.Columns.Count - 1; i++)
            {
                filter.Append(dataRow[i].ToString());
                filter.Append("\t");
            }
            dataGridView1.DataSource = filter.ToString();
        }

    if (projektItem == "Name") {
    }
    if (projektItem == "Aktivity") {
    }
}
private void组合框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
字符串projektItem=comboBox1.Items[comboBox1.SelectedIndex].ToString();
如果(项目项==“项目”){
foreach(dataGridView1.Rows中的DataRow DataRow)
{
StringBuilder过滤器=新建StringBuilder();
对于(int i=0;i
我就是这样做的。将datagridview转换为datatable

这是用于过滤的func: 如果关闭过滤器,请按住原点表返回

//datagrid to datatable
DataTable datatable = new DataTable();
datatable = (DataTable)dataGridView1.DataSource; 

//datatableOrigin to hold your origin table
DataTable originTable = null;

// find Function
Public void Find(string column, string st)
{
    DataRow[] dtResult;
    DataTable holder = New DataTable;

    //get datatable Schema
    DataTable holder = datatable.Clone();
    holder.Rows.Clear();

    If (originTable != null)
        datatable = originTable;
    Else
        originTable = datatable;

    //select return datarow array
    dtResult = datatable.Select("[" + column + "] LIKE '%" + st + "%'");

    //import all your result into holder
    foreach(DataRow dr In dtResult){holder.ImportRow(dr);}

    //pass from holder to datatable
    datatable = holder.Copy();
    holder.Clear();
}

public void showDT()
{
      dataGridView1.DataSource = datatable;
}

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // choose your column here

}

private void btn_Clicked(object sender, EventArgs e)
{
    Find('YourColumn, 'your search string);
    showDT();
}

您好,谢谢您的回答,但它不起作用,什么是dtResult,originTable,datatable,st.其中我只是第一行datatable dtFromGrid=newdatatable();dtFromGrid=dataGridView1.DataSource as DataTable;上半部分是如何将datagridview转换为datatableoriginTable,如果您关闭过滤器,您可以保留原始表以返回。我已经对其进行了一些编辑,我将代码从vb.net转换为C#,因此可能会出现一些systax问题,但这就是解决方法!在发现时,我们已经e第二部分中的两个部分应该是什么(字符串列,字符串………)