zoukankan      html  css  js  c++  java
  • DataGridView 移动行

    前言

    该片文章介绍了操作DataGridView时,对它的行进行移动操作。例如:对某一行进行上移、下移等。该篇文章只是介绍了其中一种方法,如有更好方法还请补充。

    内容

    我们可以制作这样的一个简单的界面:

    DataGridView显示数据,其他几个按钮执行相关的操作。我把这四个按钮的事件统一写成一个点击事件,在再这个事件中根据按钮的名称判断进行了什么操作。当然,首先,我们需要一些数据。这里定义了一个Person类,存放人的姓名和性别。

    Person类
     1 class Person
    2 {
    3 /// <summary>
    4 /// person构造函数
    5 /// </summary>
    6 /// <param name="name">姓名</param>
    7 /// <param name="sex">性别</param>
    8 public Person(string name,string sex)
    9 {
    10 this.name = name;
    11 this.sex = sex;
    12 }
    13
    14 /// <summary>
    15 /// 姓名
    16 /// </summary>
    17 private string name;
    18 /// <summary>
    19 /// 姓名
    20 /// </summary>
    21 public string Name
    22 {
    23 get { return name;}
    24 set { name = value; }
    25 }
    26
    27 /// <summary>
    28 /// 性别
    29 /// </summary>
    30 private string sex;
    31 /// <summary>
    32 /// 性别
    33 /// </summary>
    34 public string Sex
    35 {
    36 get { return sex;}
    37 set { sex = value; }
    38 }
    39 }

    其次是后台代码。定义了一个全局的List<Person>对象,btnChangePosition为四个按钮的点击事件,对于其中一种“置顶”操作进行了注释,其他操作也是这种套路,就不再一一注释。

    后台代码
      1 public partial class Form1 : Form
    2 {
    3 List<Person> persons = new List<Person>();
    4
    5 public Form1()
    6 {
    7 InitializeComponent();
    8 }
    9
    10 private void btnChangePosition_Click(object sender, EventArgs e)
    11 {
    12 if (persons.Count > 1)
    13 {
    14 Button button = (Button)sender;
    15 Person perList;
    16 int selectedIndex = dgv.CurrentRow.Index; //得到当前选择行的索引
    17 if (button.Name.Equals("btnMoveFirst"))//置顶操作
    18 {
    19 if (selectedIndex > 0)
    20 {
    21 if (dgv.SelectedRows.Count == 1)//选中一行,选择多行则不进行操作
    22 {
    23
    24 perList = persons[selectedIndex];//把当前行对象的值赋给临时变量
    25 persons.RemoveAt(selectedIndex);//从集合中删除当前的对象
    26 persons.Insert(0, perList);//把该对象插到第一个位置
    27
    28 dgv.DataSource = persons;//绑定对象
    29 dgv.Refresh();
    30
    31 dgv.Rows[selectedIndex].Selected = false;//当前选中行为假,因为进行置顶操作,当前选中行已经变化
    32 dgv.Rows[0].Selected = true; //选中首行
    33 dgv.CurrentCell = dgv.Rows[0].Cells[dgv.CurrentCell.ColumnIndex];//这里还需确定当前激活行
    34
    35 }
    36 else
    37 {
    38 MessageBox.Show("请选择一行");
    39 }
    40 }
    41 }
    42 else if (button.Name.Equals("btnMoveUp"))//上移
    43 {
    44
    45 if (selectedIndex > 0)
    46 {
    47 if (dgv.SelectedRows.Count == 1)//选中一行
    48 {
    49 perList = persons[selectedIndex];
    50 persons.RemoveAt(selectedIndex);
    51 persons.Insert(selectedIndex - 1, perList);
    52
    53 dgv.DataSource = persons;
    54 dgv.Refresh();
    55
    56 dgv.Rows[selectedIndex].Selected = false;
    57 dgv.Rows[selectedIndex - 1].Selected = true;
    58 dgv.CurrentCell = dgv.Rows[selectedIndex - 1].Cells[dgv.CurrentCell.ColumnIndex];
    59 }
    60 else
    61 {
    62 MessageBox.Show("请选择一行");
    63 }
    64
    65 }
    66 }
    67 else if (button.Name.Equals("btnMoveDown"))//下移
    68 {
    69
    70 if (selectedIndex < persons.Count - 1)
    71 {
    72 if (dgv.SelectedRows.Count == 1)//选中一行
    73 {
    74 perList = persons[selectedIndex];
    75 persons.RemoveAt(selectedIndex);
    76 persons.Insert(selectedIndex + 1, perList);
    77
    78 dgv.DataSource = persons;
    79 dgv.Refresh();
    80
    81 dgv.Rows[selectedIndex].Selected = false;
    82 dgv.Rows[selectedIndex + 1].Selected = true;
    83 dgv.CurrentCell = dgv.Rows[selectedIndex + 1].Cells[dgv.CurrentCell.ColumnIndex];
    84 }
    85 else
    86 {
    87 MessageBox.Show("请选择一行");
    88 }
    89
    90 }
    91 }
    92 else if (button.Name.Equals("btnMoveLast"))//置底
    93 {
    94
    95 if (selectedIndex < persons.Count - 1)
    96 {
    97 if (dgv.SelectedRows.Count == 1)//选中一行
    98 {
    99 perList = persons[selectedIndex];
    100 persons.RemoveAt(selectedIndex);
    101 persons.Insert(persons.Count, perList);
    102
    103 dgv.DataSource = persons;
    104 dgv.Refresh();
    105
    106 dgv.Rows[selectedIndex].Selected = false;
    107 dgv.Rows[persons.Count - 1].Selected = true;
    108 dgv.CurrentCell = dgv.Rows[persons.Count - 1].Cells[dgv.CurrentCell.ColumnIndex];
    109 }
    110 else
    111 {
    112 MessageBox.Show("请选择一行");
    113 }
    114
    115 }
    116 }
    117 }
    118 }
    119
    120 private void Form1_Load(object sender, EventArgs e)
    121 {
    122
    123 persons.Add(new Person("小明",""));
    124 persons.Add(new Person("小红", ""));
    125 persons.Add(new Person("小蓝", ""));
    126 persons.Add(new Person("小李", ""));
    127
    128
    129 dgv.DataSource = persons;
    130
    131
    132 }
    133
    134
    135 }
  • 相关阅读:
    VC6.0图形处理7边缘检测
    VC6.0图像处理0bmp文件分析
    java版QQ 欢迎点评
    VC6.0图像处理3灰度变换
    VC6.0图形处理6图像增强
    VC6.0图像处理1浏览图片
    VC6.0图像处理4镜像
    一个软件行业中层主管在年底给团队成员的一封信
    SQL的EXISTS与in、not exists与not in 效率比较和使用
    按某字段合并字符串
  • 原文地址:https://www.cnblogs.com/Johnny_Z/p/2147990.html
Copyright © 2011-2022 走看看