2014-04-19 4 views
0

En essayant d'obtenir de l'aide sur ce problème, j'essaie de trouver une Date spécifique dans mon Datagrid avec une zone de texte. Les dates sont actuellement des chaînes au format jj/mm/aaaa. Dans une colonne de date. J'ai posté avant mais n'ai pas de réponses utiles et la question a été enterrée. Personne ne semble avoir une réponse, ils évitent juste le sujet. À l'heure actuelle je ne peux pas avoir les dates comme DateTime en raison du reste de l'application est formatée.DataGrid Date Chaîne Filtre

Merci

EDIT CODE:

public class ImagesInfo 
{ 
    public string FileName { get; set; } //For Picture File Name 
    public string Description { get; set; } //For the Description of the Picture 
    public string Category { get; set; } //Category of Picture 
    public string Date { get; set; }//Date Taken of the Picture, format discussed in report. 
    public string Comments { get; set; } //Comments for the picture  
} 

code i utilisé lors de la recherche d'une catégorie dans le DataGrid.

if (categoryFilterBox.Text == string.Empty) 
{ 
    //used if nothing is in the filter box to avoid blanking 
    var source = new BindingSource(); 
    source.DataSource = images; 

    navigationGrid.DataSource = source; 
} 
else 
{ 
    //making a new filtered list that includes the matching Categorys and binding it. 
    string catFilter; 
    try 
    { 
     catFilter = categoryFilterBox.Text; 
     var filteredList = images.Where(item => item.Category == catFilter); 
     var filterSource = new BindingSource(); 
     filterSource.DataSource = filteredList; 
     navigationGrid.DataSource = filterSource; 
    } 
    catch (FormatException) 
    { 
     MessageBox.Show("Must be Words of Letters"); 
    } 
} 

Exemple d'un enregistrement ajouté à ma liste qui est la source du DataGrid.

private void addRecord() 
{ 
    var newImage = new ImagesInfo();//new instance 

    newImage.FileName = fileNameTextBox.Text; 
    newImage.Category = categoryComboBox.Text; 

    //try catch for input of the date 
    try 
    { 
     newImage.Date = dateTakenTextBox.Text; 
    } 
    catch (FormatException) 
    { 
     MessageBox.Show("Date Not Correct Format"); 
    } 

    try 
    { 
     newImage.Description = descriptionTextBox.Text; 
    } 
     catch (FormatException) 
     { 
      MessageBox.Show("Must user letters and words"); 
     } 
     try 
     { 
      newImage.Comments = commentsTextBox.Text; 
     } 
     catch (FormatException) 
     { 
      MessageBox.Show("Must use letters and words"); 
     } 

     images.Add(newImage);//Add instance to the main list 

     if (editCheckBox.Checked) 
     { 
      //Binding the new updated list to the datagrid 
      var source = new BindingSource(); 

      source.DataSource = images; 

      navigationGrid.DataSource = source; 

     } 

    } 

EDIT: Comment je aurais-je eu ce moment, mais il ne semble pas fonctionner.

if (startDate.Text == string.Empty) 
     { 
      var source = new BindingSource(); 

      source.DataSource = images; 

      navigationGrid.DataSource = source; 
     } 
     else 
     { 
      string dateFilter = startDate.Text; 

      var filteredList = images.Where(item => item.Date == dateFilter); 

      var filterSource = new BindingSource(); 

      filterSource.DataSource = filteredList; 

      navigationGrid.DataSource = filterSource; 

     } 
+0

Ce serait mieux si nous voyons votre code. S'il vous plaît le poster. –

+0

Le code a été ajouté si plus est nécessaire je peux fournir – user3330371

+0

Une question, quel est exactement le problème? J'ai compris que vous avez un problème avec les dates, qui sont des chaînes. Cependant, je n'ai pas obtenu où vous essayez de trouver une date précise? Merci – Christos

Répondre

0

Essayez celui-ci:

DateTime temp; 
// try to parse the provided string in order to convert it to datetime 
// if the conversion succeeds, then build the dateFilter 
if(DateTime.TryParse(TrystartDate.Text, out temp)) 
{ 
    string dateFilter = temp.ToString("dd/MM/yyyy"); 
    var filteredList = images.Where(item => item.Date == dateFilter); 
    var filterSource = new BindingSource(); 
    filterSource.DataSource = filteredList; 
    navigationGrid.DataSource = filterSource; 
} 
+0

cela a le même effet que ce que j'ai essayé de rafraichir la même grille de données, serait-il mieux j'ai utilisé un autre type de données pas DateTime mais int OU Double? – user3330371

+0

Je ne pense pas que cela aiderait parce que les cordes que vous avez sont des dates. En d'autres termes, je ne vois pas comment cela fonctionnerait quelque chose comme ça. – Christos