目标
目前正在寻找一种方法,如何从 DataGridView 中选择项目并按顶部选择的第一个进行排序。
例子
用户的第一个选择:
Selected Column1 Column2
a 1
b 2
c 3
x d 4
Run Code Online (Sandbox Code Playgroud)
第二次选择...
Selected Column1 Column2
a 1
x b 2
c 3
x d 4
Run Code Online (Sandbox Code Playgroud)
第三次选择...
Selected Column1 Column2
x a 1
x b 2
c 3
x d 4
Run Code Online (Sandbox Code Playgroud)
命令
4th row
2nd row
1st row
Run Code Online (Sandbox Code Playgroud)
概括
用户选择的第一个项目是第 4 行,然后是第 2 行,最后是第 1 行。
题
如何按上述顺序获取所有行的列表?
当前代码
我像这样创建了一个复选框列,这样用户就可以看到他们选择了什么。
DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
checkBoxColumn.Name = "Selected";
checkBoxColumn.HeaderText = "Selected";
checkBoxColumn.ReadOnly = false;
productsView.Columns.Add(checkBoxColumn);
Run Code Online (Sandbox Code Playgroud)
用户然后选中复选框以标记他们想要的所选记录,然后他们单击一个按钮打开另一个表单。
但顺序是混合的。
private void addBtn_Click(object sender, EventArgs e)
{
foreach (var row in checkedRows)
{
DateTime dateTime = dateText.Value;
string orderNumber = orderNumberText.Text;
SelectedProducts form = new SelectedProducts(dateTime, orderNumber);
form.ShowDialog();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 3
我想我会:
创建一个新列表,根据新订单存储我的数据。
List<Item> SelectedItemList= new List<Item>
Run Code Online (Sandbox Code Playgroud)
监听复选框列值的变化。选中复选框时添加到“SelectedList”,未选中时将其删除。(如何检测 DataGridView CheckBox 事件更改?)
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Rows.Count > 0)
{
if ((bool)dataGridView1.SelectedRows[0].Cells[2].Value) //the index of checkbox column
SelectedItemList.Add(itemBindingSource.current as Item)//add data to the list
else
SelectedItemList.Remove(itemBindingSource.current as Item) // remove data to list
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用该列表作为表单显示的参数。
SelectedProducts form = new SelectedProducts(SelectedItemList);
form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)