Appliquer un filtre à un BindingSource, mais ça ne fonctionne pas
J'ai une zone de texte, dans lequel j'ai mis une phrase, qui est soit la description d'une tâche ou de l'identité d'une tâche. Je veux filtrer une liste à l'aide du texte à partir de cette zone de texte. Mais quand j'ai mis le texte dans cette zone de texte, le filtrage ne fonctionne pas, et la collection dans le DataGridView ne change pas.
Ce qui peut être mauvais?
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);
}
J'ai ajouté ce qui suit dans BindData méthode et ça ne fonctionne pas non plus:
_bindingSource.Filter = string.Format("Id LIKE '%{0}%'", "23");
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;
OriginalL'auteur user278618 | 2010-09-16
Vous devez vous connecter pour publier un commentaire.
Selon la la documentation, votre sous-jacente de la source de données (par exemple, votre liste de tâches) doit mettre en œuvre les IBindingListView interface d'avoir un Filtre de travail de la propriété. Êtes-vous sûr que c'est le cas actuellement?
(En aparté, vous devez définir la propriété DataSource de votre DataGridView à la BindingSource objet lui-même plutôt que de le BindingSource.Propriété DataSource.)
pouvez-vous s'il vous plaît comment avez-vous fait?
OriginalL'auteur Alan
Vous devriez changer:
à
En changeant
_bindingSource.Filter
vous n'êtes pas actuellement changer_bindingSource.DataSource
- reste la même, et à cause de celadataGridViewTaskList.DataSource
ne change pas non plus. Dans l'autre main,_bindingSource
est changé, et vous pouvez lier directement à elle pour obtenir le changement.OriginalL'auteur Ivan Ferić
Vous pouvez toujours vérifier
_bindingSource.SupportsFiltering
pour voir si le BindingSource type prend en charge le filtrage
OriginalL'auteur s klein
Avez-vous essayez avec:
Pouvez-vous définir taskList structure?
J'ai ajouté le code du designer
OriginalL'auteur watbywbarif
Essayer d'appeler :
_bindingSource.ResetBindings(false);
après le réglage de filtre.Aussi, vous pouvez essayer d'appeler:
OriginalL'auteur Serhiy Prysyazhnyy
Alternative
IEnumerable, Liste.....etc Variable Globale
listBindingSource.DataSource = List();
Alors simple filtre de la liste et de la réaffectation des il
listBindingSource.DataSource = Liste.FindAll(t => t.x == yourValue);
OriginalL'auteur zaffar ullah