tengo un problema en un formulario, donde He añadido columnas a un control .NET ListView, en el siguiente orden:.NET problema orden de las columnas ListView
A | B | C | D
El índice de visualización para las columnas AD es 0 -3, en ese orden, pero sigue mostrando en el orden equivocado:
A | B | D | C
^-----^ these are switched at runtime
Nota: Todo se ve como yo quiero que en tiempo de diseño.
Supongo, pero no sé por qué, que es porque agregué la columna C al ListView después de haber agregado la columna D. Lo moví a una muesca en el diálogo del editor de columnas, ajusté los índices de visualización, y verificó el orden de creación en el archivo .Designer.cs, todo está en orden AD, en ese orden.
Sin embargo, el problema persiste.
También tenga en cuenta: Esto no es solo un problema de etiqueta de encabezado, las columnas se intercambian, incluidos sus datos. Los datos se agregan en el orden en que espero que se muestren, pero las dos últimas columnas se intercambian.
¿Qué más debo verificar para averiguar por qué una de mis columnas está en la posición incorrecta?
Descubrí el problema. Por algún motivo, la propiedad DisplayIndex no se conserva, incluso si la configuré en el cuadro de diálogo.
Si cerré por completo el formulario y lo volví a abrir en Visual Studio, cambió. Aparentemente, esas propiedades no son detectadas por el editor de diálogo como "modificadas", y por lo tanto tampoco me importa guardar el mecanismo de guardar.
El código que añade las columnas, fue así:
this.lvResult = new System.Windows.Forms.ListView();
this.colResultId = new System.Windows.Forms.ColumnHeader();
this.colResultTitle = new System.Windows.Forms.ColumnHeader();
this.colResultLanguage = new System.Windows.Forms.ColumnHeader();
this.colResultTags = new System.Windows.Forms.ColumnHeader();
//
// lvResult
//
this.lvResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvResult.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colResultId,
this.colResultTitle,
this.colResultLanguage,
this.colResultTags});
this.lvResult.FullRowSelect = true;
this.lvResult.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvResult.HideSelection = false;
this.lvResult.Location = new System.Drawing.Point(12, 6);
this.lvResult.Name = "lvResult";
this.lvResult.Size = new System.Drawing.Size(466, 117);
this.lvResult.TabIndex = 0;
this.lvResult.UseCompatibleStateImageBehavior = false;
this.lvResult.View = System.Windows.Forms.View.Details;
this.lvResult.SelectedIndexChanged += new System.EventHandler(this.lvResult_SelectedIndexChanged);
//
// colResultId
//
this.colResultId.Text = "#";
this.colResultId.Width = 35;
//
// colResultTitle
//
this.colResultTitle.Text = "Title";
this.colResultTitle.Width = 220;
//
// colResultTags
//
this.colResultTags.DisplayIndex = 2;
this.colResultTags.Text = "Tags";
this.colResultTags.Width = 100;
//
// colResultLanguage
//
this.colResultLanguage.Text = "Language";
Cuando añadí las propiedades que faltan directamente en el archivo, funcionó.
No, el archivo .resx del formulario está completamente vacío, a excepción de los elementos predeterminados. –
Se agregó otra sugerencia ... Agarrando pajitas. :) – Yoopergeek
Lo volveré a agregar más adelante si no puedo resolverlo, pero dado que no es un problema de tope, por ahora, lo guardaré, con la esperanza de que yo (o alguien aquí) pueda ayudarme a resolverlo, para poder evitarlo en el futuro –