DataGridView 移动行

it2022-05-09  28

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 Name22 {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 Sex35 {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 else111 {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 } posted on 2011-08-21 18:59 Johnny_Z 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Johnny_Z/archive/2011/08/21/2147990.html

相关资源:数据结构—成绩单生成器

最新回复(0)