shonezi Ответов: 6

индекс отображения столбца datagridview не работает должным образом


Привет

у меня есть небольшая проблема с datagridview, мне нужно изменить порядок столбцов в datagridview



У меня есть 10 столбцов, загруженных в datagridview, 5 из них невидимы, которые я сделал невидимыми в простом коде



а остальные 5 я хочу разместить по порядку с помощью свойства displayindex

а теперь вот в чем дело

Я ввел код

dg.AutoGenerateColumns = false;

ДГ.Колонки["Столбец1].Видна = ложь;
ДГ.Колонки["Столбец2].Видна = ложь;
ДГ.Колонки["Столбец3].Видна = ложь;
dg.Columns["Column4].Visible = false;
dg.Columns["Column5].Visible = false;

ДГ.Колонки["Column6].DisplayIndex = 1;
ДГ.Колонки["Column7].DisplayIndex = 2;
ДГ.Колонки["Column8].DisplayIndex = 3;
ДГ.Колонки["Column9].DisplayIndex = 4;
ДГ.Колонки["Column10].DisplayIndex = 5;

но Column9 попадает на место 3, а не 4, в то время как Column8 попадает на место 8, они меняются местами!!!
Я даже настроил его, чтобы сохранить DisplayIndex-es в свойствах.Настройки моего решения, а затем я читаю displayindexes в текстовые поля для каждого столбца, чтобы увидеть, и там он говорит, что Column9 находится на месте 4, но это не так, это на 3!!!!

Я озадачен
помочь любому

6 Ответов

Рейтинг:
2

Surendra Adhikari SA

Проблема возникает из-за невидимых колонок .
установите также DisplayIndex столбца invisibe .(то есть дайте DisplayIndex обоим столбцам (видимым и невидимым по порядку).
следующим образом

dg.Columns["Column1"].Visible = false;
dg.Columns["Column2"].Visible = false;
dg.Columns["Column3"].Visible = false;
dg.Columns["Column4"].Visible = false;
dg.Columns["Column5"].Visible = false;

dg.Column["Column6"].DisplayIndex = 1;
dg.Column["Column7"].DisplayIndex = 2;
dg.Column["Column8"].DisplayIndex = 3;
dg.Column["Column9"].DisplayIndex = 4;
dg.Column["Column10"].DisplayIndex = 5;

dg.Column["Column1"].DisplayIndex = 6;
dg.Column["Column2"].DisplayIndex = 7;
dg.Column["Column3"].DisplayIndex = 8;
dg.Column["Column4"].DisplayIndex = 9;
dg.Column["Column5"].DisplayIndex = 10;


shonezi

это не работает

Surendra Adhikari SA

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

Рейтинг:
2

Mahadevappa Kanike

У меня тоже была эта проблема, и в конце концов я решил эту проблему в своем приложении.
Примените значения Индекса отображения в порядке возрастания ко всем столбцам, существующим в сетке, независимо от невидимых или видимых столбцов. Вы также можете перетасовать невидимые столбцы и видимые индексы отображения вместо разделения всех видимых столбцов следует применять сначала с индексами отображения, а затем с невидимыми столбцами; однако таблица данных будет отображать только видимые столбцы в том порядке, в котором они имеют указанные индексы отображения.

Попробовать это :

dg.Columns["Column1].Visible = false;
dg.Columns["Column2].Visible = false;
dg.Columns["Column3].Visible = false;
dg.Columns["Column4].Visible = false;
dg.Columns["Column5].Visible = false;

<pre lang="cs">// Apply the DisplayIndex in ascending order 1,2,3... etc
dg.Column[&amp;quot;Column6].DisplayIndex = 1;
dg.Column[&amp;quot;Column7].DisplayIndex = 2;
dg.Column[&amp;quot;Column8].DisplayIndex = 3;
dg.Column[&amp;quot;Column9].DisplayIndex = 4;
dg.Column[&amp;quot;Column10].DisplayIndex = 5;
// These columns are exist in the grid but not displayed, 
// hence you should set the display index for invisible columns as well.
dg.Column[&amp;quot;Column1].DisplayIndex = 6;
dg.Column[&amp;quot;Column2].DisplayIndex = 7;
dg.Column[&amp;quot;Column3].DisplayIndex = 8;
dg.Column[&amp;quot;Column4].DisplayIndex = 9;
dg.Column[&amp;quot;Column5].DisplayIndex = 10;</pre>



ХТХ
Махадев


CHill60

Другими словами, используйте Решение 1, которое было опубликовано почти 2 года назад.

Рейтинг:
1

Nirav Prabtani

дайте правильную индексацию в сетку

по заданному свойству (index="number")


Рейтинг:
1

kheiltash

//напишите тот же код на показанном EventHandler:

Моя форма.Показано += новая система.EventHandler(это.DlgEmpfListView_Shown);

частная MyForm_Shown недействительным(объект отправителя, EventArgs в электронной)
{

dg.Columns["Column1"].Visible = false;
dg.Columns["Column2"].Visible = false;
dg.Columns["Column3"].Visible = false;
dg.Columns["Column4"].Visible = false;
dg.Columns["Column5"].Visible = false;

dg.Column["Column6"].DisplayIndex = 1;
dg.Column["Column7"].DisplayIndex = 2;
dg.Column["Column8"].DisplayIndex = 3;
dg.Column["Column9"].DisplayIndex = 4;
dg.Column["Column10"].DisplayIndex = 5;

dg.Column["Column1"].DisplayIndex = 6;
dg.Column["Column2"].DisplayIndex = 7;
dg.Column["Column3"].DisplayIndex = 8;
dg.Column["Column4"].DisplayIndex = 9;
dg.Column["Column5"].DisplayIndex = 10;


}


Рейтинг:
0

Member 13607973

Привет,

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

Например, можно сделать такой:

dg["ListType", i].Value = "abc" ( здесь i-это "номер строки", а ListType-имя столбца.


Richard MacCutchan

Молодец, опоздал всего на четыре года.

Рейтинг:
0

Member 14982063

Отвечая на старый пост/вопрос, я попытался выключить телевизор.

AutoGenerateColumns
свойство datagridview перед назначением displayindex.
dgv1.AutoGenerateColumns = false;
dgv1.Columns["column1HeaderText"].DisplayIndex = 0;
dgv1.Columns["column2HeaderText"].DisplayIndex = 1;
dgv1.Columns["column3HeaderText"].DisplayIndex = 2;
Одно из предложений заключается в том, что если есть несколько столбцов/любой столбец, который должен быть скрыт, то скрыть его после установки индекса отображения.
dgv1.Columns["column1HeaderText"].Visible = false;
Надеюсь, это кому-то поможет!