• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Balda

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

etc

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

Balda

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

etc

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

Balda

Вот:
Код:
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

ээээ, не понял а нафига 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)? не проще ли сначало тупо пройти по колонкам, а потом по ровам, и не городить странные ифы внутри цикла?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!