첫 번째는 당신이 당신의 DataTable
당신의 DataGridView
영향을 미치지 않습니다 변경하는 경우 즉, 당신이 DataSource
에 바인딩 경우에도 DataGridView
에서 분리된다. 그리고 귀하의 경우에는 DataGridView
의 정렬을 DataTable
에 반영하고 싶습니다. 따라서 이러한 이유 때문에 DataGridView
에서 주문/정렬의 변경 사항이있을 때마다 이벤트를 잡아야합니다. 따라서 ColumnHeaderMouseClick
이벤트는 DataGridView
입니다.
또 다른 중요한 점은 DataTable
및 DataGridView
모두의 선별 동기화를 달성에서 Sort
속성이 Datable
클래스의 DefaultView
방법이다. 따라서 우리가 할 일은 DataGridView
이 정렬 될 때마다 DataTable
을 정렬 할 것입니다.
먼저 DataTable 개체를 전역에 두어 나중에 어느 곳에서나 액세스 할 수 있도록해야합니다.
DataTable table;
둘째, 우리는 ColumnHeaderMouseClick
과 우리가 Form
생성자에 그것을 설정합니다 우리의 실제적인 목적을 위해 이벤트 리스너를 초기화해야합니다.
InitializeComponent();
dataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_ColumnHeaderMouseClick);
우리는 다음이 빈 마우스 이벤트 핸들러가 :
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
}
을 그리고 위의 방법이 자동으로 나오지 않는 경우에, 당신의 코드를 복사하여 붙여 넣습니다.
그리고 그림을 위해 우리는
Form Load
동안
DataTable
를 추가하고이 경우에는 내가 자신의 코드를 사용하기 위하여려고하고있다 : 마지막으로 우리가
ColumnHeaderMouseClick
이벤트에 일부 코드를 넣어 다음
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;
과 :
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.
}
는 이제 테이블 객체를 사용하고 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);
}
정렬 그냥 UI에서 일어나는 할 것입니다. 기본 데이터 소스를 정렬해야하는 이유는 무엇입니까? 데이터 소스는 단지 yuor 데이터 만 보유하고 있습니다. 특정 순서로 액세스하려는 경우 인덱스 또는 뷰를 사용할 수 있습니다. 최종 사용자가 결정할 재미가 없다고 결정한 것은 아닙니다. – oerkelens
Gridview를 정렬 할 때 왜 정렬이 데이터 테이블에 반영되어야합니까? – tariq
코드 소스에서 데이터 소스를 정렬 할 수 있습니다. – tariq