在Winform的DataGridView中查找数据所在行并定位选择

时间:2021-1-22 作者:WilliamChan

DataGridView根据数据查找行并定位,笔者找不到直接的方法,只能曲线求国。直接以代码来演示,大家可参考之,注意大数据量时尽量不用此方法。演示的代码数据是已经查询过的,因数据更新,需要重新查询,然后再定位到刷新之前的位置。个中意思,请看代码体会,就不做过多的注释和说明了。

            var dr = dt.DefaultView[dgv1.CurrentRow.Index];
            string sj = hl_lib.objtostr(dr["sj"]); //时间
            string mc = hl_lib.objtostr(dr["mc"]); //项目
            string je = hl_lib.objtostr(dr["je"]); //金额
            var oldIndex = dgv1.CurrentRow.Index;

            btn_Search_Click(sender, e);

            if(dgv1.RowCount >= oldIndex)
            {
                try
                {
                    var celmc = dgv1["mc", oldIndex];
                    if (celmc != null)
                    {
                        if (mc == hl_lib.objtostr(celmc.Value) &&
                            sj == hl_lib.objtostr(dgv1["sj", oldIndex].Value) &&
                            je == hl_lib.objtostr(dgv1["je", oldIndex].Value))
                        {
                            dgv1.FirstDisplayedScrollingRowIndex = oldIndex > 10 ? oldIndex - 10 : oldIndex;
                            //定位到指定行(样式)
                            dgv1.ClearSelection();
                            dgv1.Rows[oldIndex].Selected = true;

                            //让指定行处于选中状态(状态)
                            try { dgv1.CurrentCell = celmc; } catch (Exception ex) { return; }
                            dgv1.CurrentRow.Selected = true;
                            dgv1_CellClick(sender, new DataGridViewCellEventArgs(celmc.ColumnIndex, oldIndex));
                            return;
                        }
                    }
                }
                catch(Exception ex){
                    return;
                }
            }
            try
            {
                int rowCount = dgv1.Rows.Count;//得到总行数
                for (int i = 0; i < rowCount; i++)//得到总行数并在之内循环
                {
                    var celmc = dgv1["mc", i];
                    if (celmc != null)
                    {
                        if (mc == hl_lib.objtostr(celmc.Value) &&
                            sj == hl_lib.objtostr(dgv1["sj", i].Value) &&
                            je == hl_lib.objtostr(dgv1["je", i].Value))
                        {
                            dgv1.FirstDisplayedScrollingRowIndex = i > 10 ? i - 10 : i;
                            //定位到指定行(样式)
                            dgv1.ClearSelection();
                            dgv1.Rows[i].Selected = true;
                            //让指定行处于选中状态(状态)
                            try { dgv1.CurrentCell = celmc; }catch (Exception ex){return;}
                            dgv1.CurrentRow.Selected = true;
                            dgv1_CellClick(sender, new DataGridViewCellEventArgs(celmc.ColumnIndex, oldIndex));
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return;
            }

以上就是知道不分享的《在Winform的DataGridView中查找数据所在行并定位选择》,希望对您有所帮助。

声明:若您对本文内容有任何意见,欢迎发送邮件至:admin@zhidaobu.com,本站会尽快回应并做出相应处理。