DBを使用しないが、テキストからコンテンツをロードするデータグリッドビューのフィルタリング

ナイトフロスト

datagridviewを検索可能にしようとしていますが、コツをつかめないようです。私は解決策への道をグーグルで調べてみましたが、次のことがわかりました。

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (row.Cells[0].Value.ToString().ToLower().Contains(searchTextBox.Text.ToLower()) && row.Cells[0] != null)
    {
        row.Visible = true;
    }
    else
    {
        row.Visible = false;
    }
}

上記のコードはフォームのボタンにリンクされており、そこに表示するものは多くありません。テキストボックスに文字列を入力してボタンをクリックすると、次の例外が発生します。

通貨マネージャーのポジションに関連付けられた行を非表示にすることはできません。

この例外に対処する方法がわかりません。さまざまな変更を試みましたが、何も役に立ちませんでした。

あなたにアイデアを与えるために、これは私のフォームのコードです(私は1つのフォームしか持っていません):

namespace IntegratorReader
{
    public partial class start : Form
    {
        DataTable dt = new DataTable();

    public start()
    {
        InitializeComponent();
    }

    private void bOpenFileDialog_Click(object sender, EventArgs e)
    {
        OpenFileDialog theDialog = new OpenFileDialog();
        theDialog.Title = "Open Text File";
        theDialog.Filter = "TXT files|*.txt";
        theDialog.InitialDirectory = @"C:\";

        if (theDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((theDialog.OpenFile()) != null)
                {
                    string fullPath = theDialog.FileName;
                    string fileName = theDialog.SafeFileName;
                    MessageBox.Show(fullPath);
                    fillGridView(fullPath);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }
    }

    private void fillGridView (string path)
    {
        var regex = new Regex("\\\"(.*?)\\\"");
        System.IO.StreamReader file = new System.IO.StreamReader(path);
        string[] columnnames = file.ReadLine().Split(',');

        foreach (string c in columnnames)
        {
            dt.Columns.Add(c);
        }
        string newline;
        while ((newline = file.ReadLine()) != null)
        {
            newline = regex.Replace(newline, m => m.Value.Replace(',', ' '));
            DataRow dr = dt.NewRow();
            string[] values = newline.Split(',');
            for (int i = 0; i < values.Length; i++)
            {
                string v = values[i];
                v = v.Replace("\"", "");
                dr[i] = v;
            }
            dt.Rows.Add(dr);
        }
        file.Close();
        dataGridView1.DataSource = dt;

    }

    private void searchButton_Click(object sender, EventArgs e)
    {
        try
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (row.Cells[0].Value.ToString().ToLower().Contains(searchTextBox.Text.ToLower()) && row.Cells[0] != null)
                {
                    row.Visible = true;
                }
                else
                {
                   row.Visible = false;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }
    }
}
}

短い例:

多くの行を含む.txtファイルを開きますが、最初の行を取得し、それを基に列を作成します。次に、行を読み取り、「、」スプリッターに基づいて列に配置します。これはある種のCSVリーダーで実行できたと思いますが、これを機能させるにはこれが必要です。これは作業に関連するものであるため、正確な.txtファイルを提供することはできませんが、行と列が増えるだけで、通常は次のようになります。

「顧客ID」、「顧客名」

「1」、「ボブ」

「2」、「デニス」

「3」、「リチャード」

「4」、「フェルナンド」

あなたは一般的な考えを得る...

さて、私の質問は、データグリッドビューで検索する方法について完全に間違っているのか、それとも私が監視しているのは単に小さな問題なのかということです。datagridviewで検索するためのより良い方法はありますか?はいの場合、どのようにですか?

参考までに、フォームは次のようになります。

ここに画像の説明を入力してください

ムナワール

質問はこれと非常に重複しています

コードには2つの問題があります。1-空の行(最後の行)のチェックを実行せず、行を非表示にしている間、currencyManagerを一時停止しません。

修正するには、searchButton_Clickコードを次のように置き換えます。

private void searchButton_Click(object sender, EventArgs e)
    {
        try
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];
                currencyManager1.SuspendBinding();

                if (row.IsNewRow)
                    continue;


                if (row.Cells[0].Value.ToString().ToLower().Contains(searchTextBox.Text.ToLower()) )
                {
                    row.Visible = true;
                }
                else
                {
                   row.Visible = false;
                }                
                currencyManager1.ResumeBinding();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }
    }

**回答の更新**

別のオプションは、行を削除または非表示にする前に、現在のセルをnullに設定することです。これは、エラーが「

行は通貨マネージャーに関連付けられています

"。

if(dataGridView1.CurrentCell!=null)
dataGridView1.CurrentCell = null;

 row.Visible = true;//row.Visible = false

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CSSグリッドレイアウトを使用して、スティッキーヘッダーとフッターを持つコンテンツのスクロールバーを取得するにはどうすればよいですか?

分類Dev

データグリッドビューをテキストでフィルタリングするにはどうすればよいですか?

分類Dev

データをリロードせずにDataGridViewのコンテンツをフィルタリングする

分類Dev

ソースからパリティをビルドした後、Cargoビルドが「レジストリインデックスのファイルロックを待機するブロッキング」でハングする

分類Dev

インテルグラフィックコマンドセンターがローカルホストのポート9001でリッスンしているWebエンドポイントを残すのはなぜですか?

分類Dev

何らかの理由で、グリッドビューが1つの位置とテキストビューで動かなくなっています。私はアンドロイドスタジオを使用しています

分類Dev

IISはコンテンツフィルタリングを要求しますかフィルタリングの前に完全な要求をロードします

分類Dev

私の Awk コマンドが for ループなしでテキストをフィルタリングするのに、for ループが追加された場合はフィルタリングされないのはなぜですか?

分類Dev

テストアセンブリパターンを配置しているにもかかわらず、テストアセンブリがVSTS Azureビルドパイプラインでフィルタリングされないのはなぜですか?

分類Dev

コンピューティングインスタンスがあるのに、Azure ML Studioのデータドリフトモニタリングのフィールド「コンピューティングターゲット」がまだ空白なのはなぜですか?

分類Dev

角度グリッドには、インライン剣道グリッドのエディターテンプレート(リアクティブフォーム)を含む列があります。テンプレートコントロール(テキストボックス)とフォームはリンクしません

分類Dev

セキュリティルールを使用してドキュメントのフィールドをフィルタリングする方法

分類Dev

テンプレートが静的バインディングであるにもかかわらず、古いコードのオブジェクトファイルがジェネリックプログラミングパラダイムを使用する新しいコードを使用できるのはなぜですか?

分類Dev

jBPMシングルzipディストリビューションを使用して、アーティファクトへの依存関係を持つ大きなjarをアップロードするにはどうすればよいですか?

分類Dev

セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

分類Dev

テキストフィールド編集でテーブルビューデータをフィルタリングする方法-IOS

分類Dev

クラスベースビューにコンテンツを追加してフィルタリングする

分類Dev

ドキュメントライブラリアクションの屋外共有を介してコンテンツを作成しているときに「作成」ボタンをクリックすると、デフォルトのランディングページが変更されます

分類Dev

GoogleスプレッドシートのImportXMLを使用してメタプロパティから日付をフィルタリングする方法

分類Dev

あるビューから別のコントローラーのアクションメソッドにルーティングし、そのコントローラーのコンストラクターにパラメーターを渡す

分類Dev

Android StudioエディターでRecyclerViewのコンテンツのプレビューをグリッドとして表示する方法はありますか?

分類Dev

Android StudioエディターでRecyclerViewのコンテンツのプレビューをグリッドとして表示する方法はありますか?

分類Dev

AngularJsディレクティブ-リストでフィルタリングするためのドロップダウンを作成するときにローカルスコープを渡すときにディレクティブが正しくロードされない

分類Dev

1つのテーブルから複数のselectステートメントからグリッドビューのデータを取得する方法

分類Dev

ラベルやボタンがテキストフィールドのスペースをとらないようにするために、コンテンツをハグする必要があるのはいつですか。

分類Dev

削除ボタンを使用してデータグリッドビューからアイテムを削除する

分類Dev

ホスティングコントローラーからSwiftUIビューをリロードします

分類Dev

ホスティングコントローラーからSwiftUIビューをリロードします

分類Dev

C#からグリッドビューボタンのテキストを設定します

Related 関連記事

  1. 1

    CSSグリッドレイアウトを使用して、スティッキーヘッダーとフッターを持つコンテンツのスクロールバーを取得するにはどうすればよいですか?

  2. 2

    データグリッドビューをテキストでフィルタリングするにはどうすればよいですか?

  3. 3

    データをリロードせずにDataGridViewのコンテンツをフィルタリングする

  4. 4

    ソースからパリティをビルドした後、Cargoビルドが「レジストリインデックスのファイルロックを待機するブロッキング」でハングする

  5. 5

    インテルグラフィックコマンドセンターがローカルホストのポート9001でリッスンしているWebエンドポイントを残すのはなぜですか?

  6. 6

    何らかの理由で、グリッドビューが1つの位置とテキストビューで動かなくなっています。私はアンドロイドスタジオを使用しています

  7. 7

    IISはコンテンツフィルタリングを要求しますかフィルタリングの前に完全な要求をロードします

  8. 8

    私の Awk コマンドが for ループなしでテキストをフィルタリングするのに、for ループが追加された場合はフィルタリングされないのはなぜですか?

  9. 9

    テストアセンブリパターンを配置しているにもかかわらず、テストアセンブリがVSTS Azureビルドパイプラインでフィルタリングされないのはなぜですか?

  10. 10

    コンピューティングインスタンスがあるのに、Azure ML Studioのデータドリフトモニタリングのフィールド「コンピューティングターゲット」がまだ空白なのはなぜですか?

  11. 11

    角度グリッドには、インライン剣道グリッドのエディターテンプレート(リアクティブフォーム)を含む列があります。テンプレートコントロール(テキストボックス)とフォームはリンクしません

  12. 12

    セキュリティルールを使用してドキュメントのフィールドをフィルタリングする方法

  13. 13

    テンプレートが静的バインディングであるにもかかわらず、古いコードのオブジェクトファイルがジェネリックプログラミングパラダイムを使用する新しいコードを使用できるのはなぜですか?

  14. 14

    jBPMシングルzipディストリビューションを使用して、アーティファクトへの依存関係を持つ大きなjarをアップロードするにはどうすればよいですか?

  15. 15

    セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

  16. 16

    テキストフィールド編集でテーブルビューデータをフィルタリングする方法-IOS

  17. 17

    クラスベースビューにコンテンツを追加してフィルタリングする

  18. 18

    ドキュメントライブラリアクションの屋外共有を介してコンテンツを作成しているときに「作成」ボタンをクリックすると、デフォルトのランディングページが変更されます

  19. 19

    GoogleスプレッドシートのImportXMLを使用してメタプロパティから日付をフィルタリングする方法

  20. 20

    あるビューから別のコントローラーのアクションメソッドにルーティングし、そのコントローラーのコンストラクターにパラメーターを渡す

  21. 21

    Android StudioエディターでRecyclerViewのコンテンツのプレビューをグリッドとして表示する方法はありますか?

  22. 22

    Android StudioエディターでRecyclerViewのコンテンツのプレビューをグリッドとして表示する方法はありますか?

  23. 23

    AngularJsディレクティブ-リストでフィルタリングするためのドロップダウンを作成するときにローカルスコープを渡すときにディレクティブが正しくロードされない

  24. 24

    1つのテーブルから複数のselectステートメントからグリッドビューのデータを取得する方法

  25. 25

    ラベルやボタンがテキストフィールドのスペースをとらないようにするために、コンテンツをハグする必要があるのはいつですか。

  26. 26

    削除ボタンを使用してデータグリッドビューからアイテムを削除する

  27. 27

    ホスティングコントローラーからSwiftUIビューをリロードします

  28. 28

    ホスティングコントローラーからSwiftUIビューをリロードします

  29. 29

    C#からグリッドビューボタンのテキストを設定します

ホットタグ

アーカイブ