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

LVL 6
r3nderAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
The Ultimate Tool Kit for Technolgy Solution Provi

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.