Смена порядка столбцов в Datagridview

  • Автор темы Balda
  • Дата начала
B

Balda

Гость
#1
MS VS .NET 2008.
Есть стандартный dataGrigView. Источником данных для него служит dataSet.
Проблема в том, что при изменении пользователем порядка столбцов в dataGrigView последовательность столбцов в dataSet остается старой.
Что нужно сделать чтобы изменения затрагивали не только внешний вид dataGrigView, но и меняли его источник?
 
E

etc

Гость
#2
Ничего делать ненадо. Ваще не понятен смысл сего действа. ДатаСет есть ДатаСет, какая разница в какой последовательности там колонки?
 
B

Balda

Гость
#3
Дело в том, что данные из этого ДатаСета потом выводяться в документ Ексель.
И если уж пользователь поменял порядок столбцов, то хотелось бы чтобы в документе отображался новый порядок.
А на деле все равно остается старый...
 
E

etc

Гость
#4
Вы скидываете в одну кучу хранение данных и их представление. Это одна из самых грубых ошибок.
То как данные находяться в хранилище, никоем образом не должно влиять на то как их хотят видеть в том или ином представлении.
За "синхронизацию" сего отвечает прикладной момент, т.е. некий алгоритм. Таким образом, при выводе данных вы должны сами это дело предусмотреть.
Как? зависит от конкретики.
Как вы выводите данные в Ексель?
 
B

Balda

Гость
#5
Вот:
Код:
for(int i=0; i<Count+1;i++)
for(int j=0;j<this.dataSet2.Tables[0].Columns.Count;j++)
{
range = (Excel.Range)ws.Cells[i+1,j+1];
if((i+1)==1)
range.Value2 = this.dataSet2.Tables[0].Columns[j].ColumnName.ToString();	
else
range.Value2 = this.dataSet2.Tables[0].Rows[i-1][j].ToString();

}
Или через Грид:
Код:
range.Value2 = this.dataGridView1[j, i-1.Value].ToString();
Результат в обоих случаях одинаков.
 
E

etc

Гость
#6
ээээ, не понял а нафига 2 раза? чем один не угодил?

ну в любом случае, если вы хотите чтоб бралось по гриду, то ... утрировано я покажу просто а вы уж сами решайте что и как
Код:
for(int i=0; i<Count+1;i++)
for(int j=0;j<this.dataGridView1.Columns.Count;j++)
{
range = (Excel.Range)ws.Cells[i+1,j+1];
if((i+1)==1)
range.Value2 = this.dataGridView1.Columns[j].DataPropertyName;
else
range.Value2 = this.dataSet2.Tables[0].Rows[i-1][this.dataGridView1.Columns[j].DataPropertyName].ToString();
}
но и тут я не понял а что это - if((i+1)==1)? не проще ли сначало тупо пройти по колонкам, а потом по ровам, и не городить странные ифы внутри цикла?