[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 498
  • Last Modified:

datagridview sort on header click not "really" sorting it

I am assigning a list to a datagridview like below - but when I select the header to sort asc or desc on any field and I go to edit a cell by double clicking a row or cell to load the record - it is not loading the right record. it is almost like the datagrid sorted visually but not programmatically

 for (int i = 0; i < searchJob.Count(); i++)
            {
                dataGridViewSearch.Rows.Add();
                dataGridViewSearch.Rows[i].Cells["JobID"].Value = searchJob[i].JobID;
                dataGridViewSearch.Rows[i].Cells["Company"].Value = searchJob[i].company;
                dataGridViewSearch.Rows[i].Cells["WellName"].Value = searchJob[i].wellname;
                dataGridViewSearch.Rows[i].Cells["Rig"].Value = searchJob[i].rig;
                dataGridViewSearch.Rows[i].Cells["RigNumber"].Value = searchJob[i].rignum;
                                dataGridViewSearch.Rows[i].Cells["OnLocationDate"].Value = searchJob[i].OnLocationDateTime;
                dataGridViewSearch.Rows[i].Cells["OffLocationDate"].Value = searchJob[i].OffLocationDateTime;
                if (searchJob[i].inprogress || searchJob[i].initiated)
                {
                    dataGridViewSearch.Rows[i].Cells["Days"].Value = (DateTime.Now - searchJob[i].OnLocationDateTime).Days;
                }
                else if (searchJob[i].cancelled || searchJob[i].potential)
                {
                    dataGridViewSearch.Rows[i].Cells["Days"].Value = 0;
                }
                else
                {
                    dataGridViewSearch.Rows[i].Cells["Days"].Value = (searchJob[i].OffLocationDateTime - searchJob[i].OnLocationDateTime).Days;

                }
                if (searchJob[i].inprogress) { dataGridViewSearch.Rows[i].Cells["Status"].Value = "in progress"; }
                else if (searchJob[i].initiated) { dataGridViewSearch.Rows[i].Cells["Status"].Value = "initiated"; }
                else if (searchJob[i].complete) { dataGridViewSearch.Rows[i].Cells["Status"].Value = "complete"; }
                else if (searchJob[i].cancelled) { dataGridViewSearch.Rows[i].Cells["Status"].Value = "cancelled"; }
                else if (searchJob[i].potential) { dataGridViewSearch.Rows[i].Cells["Status"].Value = "potential"; }
  
            }
            Cursor.Current = Cursors.Default;
        }

Open in new window

0
r3nder
Asked:
r3nder
  • 4
  • 3
1 Solution
 
AndyAinscowFreelance programmer / ConsultantCommented:
From what I see that loads the gird but you are asking about selecting a row after sorting.
After this code runs the order of items in searchJob matches that of the grid but does it still do so after a sort?

How do you select the row after sorting / how do you sort the grid ?  (Maybe your problem is you use searchJob instead of the grid when you attempt to edit a record)
0
 
r3nderAuthor Commented:
I use the automatic sort when the user clicks the header name
this is my doubleclick method

        private void dataGridViewSearch_DoubleClick(object sender, EventArgs e)
        {
            //qzz
            //int i = dataGridViewSearch.CurrentRow.Index;
            try
            {
                if (dataGridViewSearch.CurrentRow == null)
                {

                }
                else
                {
                    currentJob = searchJob.ElementAt(dataGridViewSearch.CurrentRow.Index);

                    tabsareok = true;
                    OpenJobFile();
                }
            }
            catch
            {

            }
        }

Open in new window

0
 
AndyAinscowFreelance programmer / ConsultantCommented:
>>currentJob = searchJob.ElementAt(dataGridViewSearch.CurrentRow.Index);

As I said, you are using the index in the grid and the element from another collection at the same index AFTER you have changed the ordering in one but not the other.
You need to find a unique identifier for the selected job in the grid then search through the searchJob collection for the record with that same identifier.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
r3nderAuthor Commented:
so if I wanted the jobID in searchJob (which is common in currentjob) how would I do the search
cuurentjob = searchjob.ElementAt(dataGridViewSearch????
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
loop through the records.
0
 
r3nderAuthor Commented:
 int jobnum1;
                    bool jobNum = int.TryParse(dataGridViewSearch.CurrentRow.Cells["JobID"].EditedFormattedValue.ToString(),out jobnum1);
                    if (jobNum == true)
                    {
                        currentJob = searchJob.Find(item => item.JobID == jobnum1);
                    }

Open in new window


Done - thanks Andy
0
 
r3nderAuthor Commented:
Thanks Again Andy
0

Featured Post

Learn to develop an Android App

Want to increase your earning potential in 2018? Pad your resume with app building experience. Learn how with this hands-on course.

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