2014-08-28 5 views
-1

Можно сортировать DataGridView, нажав на один из его ColumnHeaderCell. Но я бы хотел, чтобы один столбец, содержащий индекс каждой строки, оставался фиксированным.сортировка не всех столбцов в datagridview

Я имею в виду, что когда я нажимаю на другой заголовок столбца, строки сетки должны сортироваться по содержимому этого столбца, кроме первого столбца, содержащего индекс строк.

Извините! Я не могу отправить изображение!

ответ

1

Если вы имеете в виду, что хотите перерыв строки: Нет, вы не можете этого сделать, не создавая их полностью. Строка - это единица с ее столбцами, и они могут двигаться только как одна.

Однако, если вы хотите один столбец всегда содержит видимый номер строки вы просто должны повторно заполнить этот столбец после каждого вида:

private void dataGridView1_Sorted(object sender, EventArgs e) 
{ 
    dataGridView1.SuspendLayout(); 
    int yourindex = 0; // whichever column your index is at 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
          row.Cells[yourindex].Value = row.Index; 
    dataGridView1.ResumeLayout(); 

} 

Примечания: Делая это, вы потеряете способность к заново создайте исходный порядок сортировки. Это может быть не проблема. Если вам нужно включить дополнительный столбец с именем «ключ» или «старый порядок» или что-то еще.

+0

спасибо за ваш ответ, но требуется столько времени, чтобы воссоздать эту колонку. например, у меня есть 200 строк, для каждого нажатия я должен ждать несколько секунд, чтобы увидеть изменения. возможно, я должен использовать другое datagridview для этого столбца, но я подумал, есть ли лучшее решение. – AhmadReza

+1

А? Заполнение 200 ячеек числом не должно занимать более одной секунды даже на более медленной машине. Чтобы избежать ненужных обновлений экрана, это может помочь включить DGV в режим ожидания макета, см. Отредактированный ответ! Но на самом деле я могу добавить 20000 строк, и для установки этих индексов по-прежнему требуется меньше секунды! Если вы возьмете более одной секунды за 200 строк, происходит что-то еще ..!? – TaW

1

Попробуйте

Int32 columnIndex = 1;// Index of the column you want as to be not sortable 
DataGridView.Columns[columnIndex].SortMode = DataGridViewColumnSortMode.NotSortable; 

и убедитесь, что вы делаете это после заполнения данных.

Смежные вопросы