2013-11-29 40 views
1

我在設計時通過在列表視圖控件中拖動列邊框來手動定義列寬,但在運行時所有列都以相同寬度顯示。在InitialiseComponent列表視圖列寬在設計時未在運行時使用

代碼是

// 
     // 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; 

任何人都可以告訴我如何獲得在運行時使用的設計時間列寬?

回答

-1

問題:你是手動以下語句設置你的ListViewcolumnswidths onceagain:

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

上面的語句覆蓋您的設計時Widths。所以最後你的ListView列寬是基於上述承諾。

解決方案您應該評論/刪除上述語句以獲得Widths,它們被設置爲designtime

Comlete解決方案:

  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; */ 
+1

看起來像你甚至沒有嘗試它,我已經試過它和OP的問題是明顯存在。只有第一列保留*設計時間寬度*,而其他所有列不保留。順便說一句,他發佈的代碼(你說它覆蓋了設計寬度)是他試圖將寬度保持爲他想要的,但當然這不在設計階段。 –

相關問題