• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1275
  • Last Modified:

Filtering DataGridView with Date Cannot perform '=' operation on System.DateTime and System.String

Error Message: Cannot perform '=' operation on System.DateTime and System.String

I have a Dataset with date values that look like "11/23/2006" , that format.
I am trying to use a combobox to sort datagridview to only show things concerning tomorrow.

Pretty simple but I keep getting that error message. I have made my column in the dataset a String type

            string dt = DateTime.Today.AddDays(01).ToShortDateString() ;
            if (sortBox.Text == "Due Tomorrow")
            {
                dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = " + dt + "";
            }

            else
            {
            }
0
JasonWinn
Asked:
JasonWinn
  • 6
  • 3
1 Solution
 
DrAskeCommented:
>>  dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = " + dt + "";
add single quote
    dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = '" + dt + "'";
0
 
JasonWinnAuthor Commented:
hey DrAske,

I gave that a shot but it is not filtering for some reason. I get no error message but it does not filter. I have records in the "dueDate" column for tomorrow (11/29/2006) and everything appears to be correct but not filtering happening

any ideas?

thanks

        private void sortBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            string dt = DateTime.Today.AddDays(01).ToShortDateString() ;
         
            if (sortBox.Text == "Due Tomorrow")
            {
                dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = '" + dt + "'";
                this.assingmentListDataGridView.Refresh();
            }

            else
            {
            }
        }
0
 
DrAskeCommented:
>>I gave that a shot but it is not filtering for some reason
That means the first Error Msg has gone.
>> I get no error message but it does not filter
what kind of errors?? compile-time error or it gives you an exception??
>> string dt = DateTime.Today.AddDays(01).ToShortDateString() ;
If you try to print out *dt* you will get something like this "11/29/2006 12:00:00 AM", and I think that's why no filtering happens !! So try this:

private void sortBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            string dt = DateTime.Today.AddDays(01).ToShortDateString() ;
           string[] d = dt.split(' '); // tokenize the string
            if (sortBox.Text == "Due Tomorrow")
            {
                dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = '" + d[0]+ "'"; // d[0] is "11/29/2006"
                this.assingmentListDataGridView.Refresh();
            }

            else
            {
          /// ...
            }
        }

try it, and post back the result..
regards,Ahmad;
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
JasonWinnAuthor Commented:
Hey Ahmad,
I gave it a shot, and no error message, but no filtering.

I made a label.Text = d[0]; and the result was "11/30/2006" so its doing the correct date, but not sure why it isnt actually filtering.

Jason
0
 
JasonWinnAuthor Commented:
Maybe there is an easier way? All I would like to be able to do is filter out date's/ranges of my datagridview/dataset.

my goal is to have the user click "filter by things for tomorrow" or "filter for things this week".

maybe there is something easier for filtering with dates?

Jason
0
 
JasonWinnAuthor Commented:
Maybe the problem is elsewhere, even doing this not filter out things for 11/30/2006, everything remains visible

            if (sortBox.Text == "Due Tomorrow")
            {
                dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = '11/30/2006'"; // d[0] is "11/29/2006"
                assingmentListDataGridView.Refresh();
     
            }

            else
            {
                /// ...
            }
0
 
JasonWinnAuthor Commented:
I am really confused now.... even a simple statement like this is not working.

 If I have this right, this should only display rows containing "hi" in the description column in my DataGridView?

 this.dsAssignment.assignmentsTable.DefaultView.RowFilter = "description = 'hi'";
// Does Not Work
0
 
DrAskeCommented:
OK!! I can't see anything wrong in your code!! but try to add output statement inside the *if* statement to notify you when it is executed. If it doesn't!! then the problem is in the *if* condition.

 if (sortBox.Text == "Due Tomorrow")
            {
                MessageBox.Show("IT'S OK!!");
                dsAssignment.assignmentsTable.DefaultView.RowFilter = "dueDate = '11/30/2006'"; // d[0] is "11/29/2006"
                assingmentListDataGridView.Refresh();
     
            }
0
 
JasonWinnAuthor Commented:
Hey DrAske,
I did that and that works fine and the messagebox comes up.

Whats really interesting is, I made label1.Text = d[0], and the label would show 11/30/2006....
im wondernig if it is because my dataset is being loaded from an xml file? the xml file shows 11/30/2006, without any hours, minutes or seconds.

Thanks for your help so far!
jason
0
 
bromoseCommented:
Hi

Your date string in your filter needs to be formatet as:

#" + date.Month + "/" + date.Day + "/" + date.Year + "#"

Regards,
Kaj Bromose
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

  • 6
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now