在设计时设置的Listview列宽在运行时未使用

本文关键字:运行时 未使用 Listview 设置 | 更新日期: 2024-05-25 15:57:06

我在设计时通过在listview控件中拖动列边界手动定义了列宽,但在运行时,所有列都显示为相同的宽度。

初始化组件中的代码为

// 
        // lstLicenses
        // 
        this.lstLicenses.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
        this.Company,
        this.ExpiryDate,
        this.MaxUsers,
        this.Key});
        this.lstLicenses.Location = new System.Drawing.Point(465, 46);
        this.lstLicenses.MultiSelect = false;
        this.lstLicenses.Name = "lstLicenses";
        this.lstLicenses.Size = new System.Drawing.Size(565, 228);
        this.lstLicenses.TabIndex = 18;
        this.lstLicenses.UseCompatibleStateImageBehavior = false;
        this.lstLicenses.View = System.Windows.Forms.View.Details;`

`似乎没有存储设计时列宽信息。解决方法是在加载后手动定义列宽,如下所示,但这不应该是必要的。

string queryString = "SELECT * FROM dbo.Licenses";
                SqlDataAdapter adapter = new SqlDataAdapter(queryString, sEnv);
                DataSet Licenses = new DataSet();
                adapter.Fill(Licenses, "Licenses");
                int iLicensesRows = Licenses.Tables[0].Rows.Count;
                foreach (DataRow row in Licenses.Tables[0].Rows)
                {
                ListViewItem LVI = lstLicenses.Items.Add(row["Company"].ToString());
                LVI.SubItems.Add(row["ExpiryDate"].ToString());
                LVI.SubItems.Add(row["MaxUsers"].ToString());
                LVI.SubItems.Add(row["Key"].ToString());
                }
                lstLicenses.Columns[0].Width = 100;
                lstLicenses.Columns[1].Width = 130;
                lstLicenses.Columns[2].Width = 85;
                lstLicenses.Columns[3].Width = 225;

有人能告诉我如何在运行时使用设计时列宽吗?

在设计时设置的Listview列宽在运行时未使用

问题:您通过以下语句再次手动设置ListView columnswidths

                lstLicenses.Columns[0].Width = 100;
                lstLicenses.Columns[1].Width = 130;
                lstLicenses.Columns[2].Width = 85;
                lstLicenses.Columns[3].Width = 225;

上面的语句覆盖了您的设计时Widths。所以最后您的ListView列宽是基于上面的语句设置的。

解决方案您应该注释/删除以上语句以获得设置为designtimeWidths

删除解决方案:

            string queryString = "SELECT * FROM dbo.Licenses";
            SqlDataAdapter adapter = new SqlDataAdapter(queryString, sEnv);
            DataSet Licenses = new DataSet();
            adapter.Fill(Licenses, "Licenses");
            int iLicensesRows = Licenses.Tables[0].Rows.Count;
            foreach (DataRow row in Licenses.Tables[0].Rows)
            {
            ListViewItem LVI = lstLicenses.Items.Add(row["Company"].ToString());
            LVI.SubItems.Add(row["ExpiryDate"].ToString());
            LVI.SubItems.Add(row["MaxUsers"].ToString());
            LVI.SubItems.Add(row["Key"].ToString());
            }
           //Comment or remove the below statements to get design time widths.
           /*lstLicenses.Columns[0].Width = 100;
            lstLicenses.Columns[1].Width = 130;
            lstLicenses.Columns[2].Width = 85;
            lstLicenses.Columns[3].Width = 225; */