views:

127

answers:

4

I have textbox when I put phrase of description of task or id of task. I want to filter this list by text of this textbox. But when I put text into this textbox filtering doesn't work. Collection i datagridview doesn't change.

What can be wrong ?

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);

        }

I added

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

in BindData method and it doesn't work too :/

Designer:

 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;
A: 

Did you try with:

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

Can you define taskList structure?

watbywbarif
I have tried without any result :/
I added designer code
A: 

Try to call _bindingSource.ResetBindings(false); after setting filter.

Also you can try to call: dataGridViewTaskList.ResetBindings(); dataGridViewTaskList.Refresh(); dataGridViewTaskList.Update();

Serhiy Prysyazhnyy
It still doesn't work
+2  A: 

According to the documentation, your underlying data source (i.e. your task list) must implement the IBindingListView interface to have a working Filter property. Are you sure this is the case right now?

(As an aside, you should set the DataSource property of your DataGridView to the BindingSource object itself rather than the BindingSource.DataSource property.)

Alan
You have right. as DataSource of BindingSource is set array :/
A: 

You should change:

dataGridViewTaskList.DataSource = _bindingSource.DataSource;

to

dataGridViewTaskList.DataSource = _bindingSource;

By changing _bindingSource.Filter you're not actualy changing _bindingSource.DataSource - it stays the same and because of that dataGridViewTaskList.DataSource doesn't change either. In the other hand, _bindingSource is changed, and you can bind directly to it to get that change.

Ivan Ferić