4

タスクの説明またはタスクの ID であるフレーズを入れる TextBox があります。この TextBox のテキストを使用してリストをフィルター処理したいと考えています。しかし、この TextBox にテキストを入力すると、フィルタリングが機能せず、DataGridView のコレクションは変更されません。

何が間違っている可能性がありますか?

public void BindData()
{
    var emptyBindingSource = new BindingSource();
    dataGridViewTaskList.AutoGenerateColumns = false;
    dataGridViewTaskList.DataSource = emptyBindingSource;

    var taskList = GetTasks();

    _bindingSource = new BindingSource();
    _bindingSource.DataSource=taskList.Response;

    dataGridViewTaskList.AutoGenerateColumns = false;

    dataGridViewTaskList.DataSource = _bindingSource.DataSource;

    if (dataGridViewTaskList.Columns["gridViewColumnId"] == null)
        dataGridViewTaskList.Columns.Add(new DataGridViewColumn() {Name = "gridViewColumnId"});
    else
        dataGridViewTaskList.Columns["gridViewColumnId"].DataPropertyName = "Id";

    if (dataGridViewTaskList.Columns["gridViewColumnDescription"] == null)
        dataGridViewTaskList.Columns.Add(new DataGridViewColumn() {Name = "gridViewColumnDescription"});
    else
        dataGridViewTaskList.Columns["gridViewColumnDescription"].DataPropertyName = "Description";
}

private void tbSearchedPhraseOrId_TextChanged(object sender, EventArgs e)
{
    _bindingSource.Filter = string.Format("Id = '{0}'", tbSearchedPhraseOrId.Text);
}

BindData メソッドに以下を追加しましたが、どちらも機能しません。

_bindingSource.Filter = string.Format("Id LIKE '%{0}%'", "23");

デザイナー:

this.dataGridViewTaskList.AllowUserToAddRows = false;
this.dataGridViewTaskList.AllowUserToDeleteRows = false;
this.dataGridViewTaskList.AllowUserToOrderColumns = true;
this.dataGridViewTaskList.AllowUserToResizeRows = false;
this.dataGridViewTaskList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
this.dataGridViewTaskList.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridViewTaskList.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.dataGridViewTaskList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewTaskList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.gridViewColumnId,
this.gridViewColumnDescription});
this.dataGridViewTaskList.Location = new System.Drawing.Point(6, 62);
this.dataGridViewTaskList.MultiSelect = false;
this.dataGridViewTaskList.Name = "dataGridViewTaskList";
this.dataGridViewTaskList.ReadOnly = true;
this.dataGridViewTaskList.RowHeadersVisible = false;
this.dataGridViewTaskList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewTaskList.Size = new System.Drawing.Size(414, 488);
this.dataGridViewTaskList.TabIndex = 0;
4

6 に答える 6

7

ドキュメントによると、基礎となるデータ ソース (つまり、タスク リスト) は IBindingListView インターフェイスを実装して、動作する Filter プロパティを持つ必要があります。これが今の状況であると確信していますか?

(余談ですが、DataGridView の DataSource プロパティを BindingSource.DataSource プロパティではなく、BindingSource オブジェクト自体に設定する必要があります。)

于 2010-09-19T20:06:49.580 に答える
1

変更する必要があります:

dataGridViewTaskList.DataSource = _bindingSource.DataSource;

dataGridViewTaskList.DataSource = _bindingSource;

変更し_bindingSource.Filterても、実際には変更されていません。_bindingSource.DataSource同じままであり、そのためにdataGridViewTaskList.DataSource変更されません。一方、_bindingSourceは変更されており、それに直接バインドしてその変更を取得できます。

于 2010-09-24T09:35:41.297 に答える
0

あなたは試しましたか:

_bindingSource.Filter = string.Format("gridViewColumnId = '{0}'", tbSearchedPhraseOrId.Text);

taskList 構造を定義できますか?

于 2010-09-16T13:50:23.907 に答える
0

_bindingSource.ResetBindings(false);フィルターを設定した後、: を呼び出してみてください。

また、次のように呼び出すこともできます。

dataGridViewTaskList.ResetBindings();
dataGridViewTaskList.Refresh();
dataGridViewTaskList.Update();
于 2010-09-17T13:23:55.190 に答える