6

ユーザーが DataGridView (dgv) の列で数値を検索できるようにしたい。dgv は多くのレコードを保持できます。各レコードにはプロジェクト番号があります。そのため、ユーザーがプロジェクト番号の列でプロジェクト番号を検索できるようにしたいと考えています。私が持っている列は次のとおりです。画像 (ヘッダーテキストなし); プロジェクト番号; プロジェクト名; 会社; コンタクト。

これが私のコードです:

private void btnSearch_Click(object sender, EventArgs e)
{
    string searchValue = textBox1.Text;
    int rowIndex = -1;

    dgvProjects.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    try
    {
        foreach (DataGridViewRow row in dgvProjects.Rows)
        {
            if (row.Cells[row.Index].Value.ToString().Equals(searchValue))
            {
                rowIndex = row.Index;
                dgvProjects.Rows[row.Index].Selected = true;
                break;
            }
        }
    }
    catch (Exception exc)
    {
        MessageBox.Show(exc.Message);
    }
}

問題 #1:これまでの処理: ユーザーが TextBox1 にプロジェクト番号を入力します。ボタンをクリックすると、コードは行でこの文字列を検索し、プロジェクト番号が見つかると、その行が選択されます。正常に動作しますが、一度だけです。他のプロジェクト番号を検索したいのですが、何も起こりません。

問題 #2:これは、プロジェクト名列の値のみを検索することで、より良い方法で実行できると思います。しかし、どうすればこれを適切に行うことができますか?

検索に使用したコードは、この回答からのものです

4

7 に答える 7

21

row.Cells[row.Index] を使用している理由。検索する列のインデックスを指定する必要があります (問題 2)。たとえば、row.Cells[row.Index] を row.Cells[2] に変更する必要があります。ここで、2 は列のインデックスです。

private void btnSearch_Click(object sender, EventArgs e)
{
    string searchValue = textBox1.Text;

    dgvProjects.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    try
    {
        foreach (DataGridViewRow row in dgvProjects.Rows)
        {
            if (row.Cells[2].Value.ToString().Equals(searchValue))
            {
                row.Selected = true;
                break;
            }
        }
    }
    catch (Exception exc)
    {
        MessageBox.Show(exc.Message);
    }
}
于 2012-11-01T09:19:25.203 に答える
3

最初にビルドしてからasDataTableに割り当ててみませんか:DataGridViewDataSource

DataTable table4DataSource=new DataTable();

table4DataSource.Columns.Add("col00");
table4DataSource.Columns.Add("col01");
table4DataSource.Columns.Add("col02");

...

(行を手動で、円で、またはDataReaderデータベース テーブルから追加します) (データソースを割り当てます)

dtGrdViewGrid.DataSource = table4DataSource;

そして、次を使用します。

(dtGrdViewGrid.DataSource as DataTable).DefaultView.RowFilter = "col00 = '" + textBoxSearch.Text+ "'";
dtGrdViewGrid.Refresh();

このコードをtextbox_textchangeイベント内に配置することもでき、書き込み時にフィルター処理された値が表示されます。

于 2014-06-30T22:13:48.720 に答える
0

"MyTable".DefaultView.RowFilter = "LIKE '%" + textBox1.Text + "%'"; this.dataGridView1.DataSource = "MyTable".DefaultView;

データベース接続とデータテーブルとの関係はどうですか? DefaultViewを正しく設定するにはどうすればよいですか?

このコードを使用してデータを取得します。

con = new System.Data.SqlServerCe.SqlCeConnection();
con.ConnectionString = "Data Source=C:\\Users\\mhadj\\Documents\\Visual Studio 2015\\Projects\\data_base_test_2\\Sample.sdf";
con.Open();

DataTable dt = new DataTable();

adapt = new System.Data.SqlServerCe.SqlCeDataAdapter("select * from tbl_Record", con);        
adapt.Fill(dt);        
dataGridView1.DataSource = dt;
con.Close();
于 2016-04-12T15:16:41.593 に答える
0
 private void btnSearch_Click(object sender, EventArgs e)
    {
        try
        {
            string searchValue = txtSearch.Text;
            string colName = dataGridView1.Columns[1].Name;//Column Number of Search
            ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = string.Format(colName+" like '%{0}%'", searchValue.Trim().Replace("'", "''"));
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }
      
    }

    private void txtSearch_TextChanged(object sender, EventArgs e)
    {
        btnSearch_Click(null,null);
    }
于 2022-01-05T22:53:36.077 に答える