首先,即使您将DataTable
对象绑定到 ,也会将其分离,也就是说,如果您更改您的,它不会影响您的. 在您的情况下,您希望将排序反映在. 因此,您需要在每次. 因此,您需要捕获.DataGridView
DataSource
DataGridView
DataTable
DataGridView
DataTable
DataGridView
ColumnHeaderMouseClick
DataGridView
另一个重要的事情是,在实现两者的同步排序中DataTable
,DataGridView
是具有属性的类的DefaultView
方法。所以,我们要做的是每次更改排序时,我们也会排序。Datable
Sort
DataGridView
DataTable
首先,我们需要使 DataTable 对象成为全局对象,以便我们以后可以在任何地方访问它。
DataTable table;
其次,我们需要ColumnHeaderMouseClick
为我们的实际目的初始化一个事件监听器,我们将在Form
构造函数中设置它。
InitializeComponent();
dataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_ColumnHeaderMouseClick);
然后我们有这个空的鼠标事件处理程序:
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
}
如果上述方法没有自动出现,只需复制并粘贴您的代码即可。
为了便于说明,我们将在此DataTable
期间添加Form Load
,在这种情况下,我将使用您自己的代码:
table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("Age", typeof(int));
table.Rows.Add("Alex", 27);
table.Rows.Add("Jack", 65);
table.Rows.Add("Bill", 22);
dataGridView1.DataSource = table;
最后我们将在ColumnHeaderMouseClick
事件中添加一些代码:
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dataGridView1.SortOrder.ToString() == "Descending") // Check if sorting is Descending
{
table.DefaultView.Sort = dataGridView1.SortedColumn.Name + " DESC"; // Get Sorted Column name and sort it in Descending order
}
else
{
table.DefaultView.Sort = dataGridView1.SortedColumn.Name + " ASC"; // Otherwise sort it in Ascending order
}
table = table.DefaultView.ToTable(); // The Sorted View converted to DataTable and then assigned to table object.
}
您现在可以使用 table 对象并根据DataGridView
.
只是为了确认我的声明,我们将在您的表单中创建一个名为的按钮,button1
单击它时将显示第一行和已排序的列值,例如:
private void button1_Click(object sender, EventArgs e)
{
String sortedValue = dataGridView1.SortedColumn.Name == "Name" : table.Rows[0][0].ToString() ? table.Rows[0][1].ToString();
MessageBox.Show(sortedValue);
}