C# 如何在DataGgridView中搜索没有数据库的文件

C# 如何在DataGgridView中搜索没有数据库的文件,c#,winforms,visual-studio-2010,search,datagridview,C#,Winforms,Visual Studio 2010,Search,Datagridview,我的搜索功能现在正在列表框中运行。。我正在将文件夹中的所有文件填充到列表框中。。我可以从列表框中相应地搜索文件名。但我真正的想法是从网格视图中搜索。因此,我需要您的帮助来修改此内容并在我的gridview中搜索。。我该怎么做呢。 需要根据我的列名搜索图纸编号 我的gridview快照,我需要搜索这些文件 用于在列表框内搜索的代码 代码段: private void SrchBtn_Click(object sender, EventArgs e) { Directo

我的搜索功能现在正在列表框中运行。。我正在将文件夹中的所有文件填充到列表框中。。我可以从列表框中相应地搜索文件名。但我真正的想法是从网格视图中搜索。因此,我需要您的帮助来修改此内容并在我的gridview中搜索。。我该怎么做呢。 需要根据我的列名搜索
图纸编号

我的gridview快照,我需要搜索这些文件

用于在列表框内搜索的代码

代码段:

  private void SrchBtn_Click(object sender, EventArgs e)
    {
        DirectoryInfo di = new DirectoryInfo(@"C:\St\Fabrication\Draft");
        FileInfo[] fi = di.GetFiles();
        if (textBox1.Text != "")
        {
            string search = textBox1.Text;
            lbxResults.Items.Clear();
            foreach (FileInfo curFile in fi)
            {
                if (curFile.Name.ToUpper().IndexOf(search.ToUpper()) != -1)
                {
                    lbxResults.Items.Add(curFile.Name);
                }
                textBox1.Clear();
                textBox1.Focus();
            }
        }
    }
能够从列表框中搜索

进入列表框的已搜索文件的快照


我需要将此搜索转换为我的gridview。我该怎么做

以下是一个示例,用于检查匹配项并选择所有匹配的行。 注:

您所写的列名不包含空格

我显示标签中的匹配数

可以通过几个选项进行匹配。选择您需要的或给用户复选框

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        string columnName = "filename";

        bool partial = false;  // full comparison or only a substring is searched
        bool includeExtensions = true;  // include the file extension in the search
        bool ignoreCase = true;   // make the search case-(in)sensitive

        string search = textBox1.Text;
        if (ignoreCase) search = search.ToLowerInvariant();

        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            string v = dataGridView1.Rows[i].Cells[columnName].Value.ToString();
            if (ignoreCase) v = v.ToLowerInvariant();

            string f = includeExtensions ? 
                        Path.GetFileName(v) : Path.GetFileNameWithoutExtension(v);

            if (partial) dataGridView1.Rows[i].Selected = (f.IndexOf(search) >= 0);
            else dataGridView1.Rows[i].Selected = (f == search);
        }
        label1.Text = dataGridView1.SelectedRows.Count.ToString() + " files found.";       
    }
private void textBox1\u TextChanged(对象发送者,事件参数e)
{
string columnName=“filename”;
bool partial=false;//完全比较或只搜索子字符串
bool includeExtensions=true;//在搜索中包括文件扩展名
bool ignoreCase=true;//使搜索区分大小写-(in)
字符串搜索=textBox1.Text;
if(ignoreCase)search=search.ToLowerInvariant();
对于(int i=0;i=0);
else dataGridView1.Rows[i].Selected=(f==search);
}
label1.Text=dataGridView1.SelectedRows.Count.ToString()+“找到文件。”;
}

在按钮单击事件上尝试此方法。这将检查文件是否存在于
folderPath
变量中指定的文件夹路径中
System.IO.Directory.GetFiles(字符串路径,字符串模式)
函数将在字符串匹配的情况下从文件夹中查找文件,并在绘图单元中指定值

string folderPath = @"C:\St\Fabrication\Draft";
for (int i = 0; dataGridView1.Rows.Count; i++)
{
    string strSearch = string.Format("*{0}*", dataGridView1.Rows[i].Cells["Drawing_Number"].Value);
    string[] arrFiles = System.IO.Directory.GetFiles(folderPath, strSearch);
    if (arrFiles.Length > 0)
    {
        dataGridView1.Rows[i].Cells["Drawing"].Value = arrFiles[0];
    }
}
我找到了答案。。 这是一件简单的事情

代码如下:

        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter
            = string.Format(@"`Drawing Number` LIKE '%{0}%' OR `Release Path` LIKE '%{0}%'", textBox1.Text);
        dataGridView1.Focus();
        textBox1.Focus();
        int rowCount = dataGridView1.BindingContext[dt].Count;
        if (rowCount == 0)
        {
            MessageBox.Show("No results");
        }

我从这个链接找到了帮助:

你的应用程序是什么类型的?它是web应用程序还是桌面应用程序?@Christos desktop app如何在我的gridview中填充?您可以将所有信息(搜索结果或文件名)存储在不可见(或可见)列中。然后通过
按列索引枚举访问它,强制转换为类型(
字符串
如果只是文件名),完成。@Sinatr我已经更新了我的代码,请确认。。我想将此列表框搜索升级到datagridsearch@TaW我无法改变这个问题,我只是添加了更多的细节和代码。。这样你就可以很容易地帮上忙了!!标签1始终显示找到的0个文件。即使文件在那里,它仍然显示0个文件。您是否检查了选项??文件名是什么?@对不起。。你能再来吗!!!我不明白你所说的选择。。你怎么能不理解代码中的‘bool’:‘bool partial=false;bool includeExtensions=true;bool ignoreCase=true`我把它们放在那里,这样你就可以更好地控制搜索的工作方式。如何使用它们由你决定。在我的测试程序中,我将它们耦合到复选框中,这样我就可以用各种方式进行测试。@StacyKebler
strearch
显示的值是多少?确保它不应为空或null。当多个通配符放置错误或定义了一个或多个无效字符时,可能会发生此问题。也就是说,它应该是
*文件名*
。但是,它不应该是
**
**MY_FILE
,其中
*
是通配符。看看这篇文章和这篇文章。@Nimesh-u,你好,nohh。。那太好了:)