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 }
  • 相关阅读:
    New version of VS2005 extensions for SharePoint 3.0
    QuickPart : 用户控件包装器 for SharePoint Server 2007
    随想
    发布 SharePoint Server 2007 Starter Page
    如何在SharePoint Server中整合其他应用系统?
    Office SharePoint Server 2007 中文180天评估版到货!
    RMS 1.0 SP2
    SharePoint Server 2007 Web内容管理中的几个关键概念
    如何为已存在的SharePoint站点启用SSL
    Some update information about Office 2007
  • 原文地址:https://www.cnblogs.com/Johnny_Z/p/2147990.html
Copyright © 2011-2022 走看看