2014-01-06 58 views
1

enter image description here是否有可能創建一個看起來像這樣的DataGridView?

這是通過使用一些第三方組件如C1開發的。正如你所看到的,這裏有三種行...

Type 1. L0000000000000000420 - 這種行是從數據庫中提取的。 (只讀)

Type 2. Enter Amount - 這種行爲用戶輸入的數量。 (這也可能包含某些列中的下拉列表)(僅當選中時纔可編輯)

Type 3. WHITE ROW - 這只是一個空白的只讀行,以獲得更好的外觀和感覺。

我想知道是否有可能在不使用任何第三方組件的情況下創建類似的DataGridView? 我的想法是..從數據庫中獲取行到一個DataTable中,然後循環它...我想在獲取每一行之後在DataTable中添加兩個額外的空白行。

我也將增加,這將有一個值,例如一列,

A - (這是爲了表示類型1)

乙 - (這是爲了表示類型2)

ç - (這是用於指示類型3)

C ..等

然後,我將檢查循環中的行的類型,然後將該行的屬性設置爲相應地只讀/可編輯的顏色屬性。

但我不確定這是否實際可行。我不知道我要如何爲tpe 2專欄添加ComboBox。因爲如果我添加一個ComboBox列,它將顯示在所有三行中。這可能嗎?如果是的話,你能告訴我一些想法嗎?在我提出一些更具體的問題之前,我需要知道如何做到這一點。謝謝。

+1

**解決方法:使用** WPF。 winforms是一個非常老的技術,沒有人在意,而且不支持任何東西。你可以很容易地在WPF中創建類似於XAML的30到50行,而在WinForms中需要幾年的可怕黑客。 –

+1

恐怕我沒有足夠的時間學習WPF。 – Arbaaz

+3

您確定您可以在WinForms中創建比您學習WPF更快的外觀嗎? – Paparazzi

回答

2

我可能會同意WPF對這些事情更好/更快,但是他的選擇是否使用它。並從頭開始學習WPF是不是快...

您的數據爲長手動綁定到你的DataGridView你可以控制你的單細胞的行爲和外觀,當然也包括顏色(這是最簡單的一部分)。我列舉了一個「消失組合框」單元的示例。最後一欄是一個簡單的DataGridViewComboBoxColumn

enter image description here

private void Form1_Load(object sender, EventArgs e) 
{ 

    dataGridView1.Rows.Add(new[] { "L00000422", "", "","A" }); 
    dataGridView1.Rows.Add(new[] { "Enter Amount", "", "","" }); 
    dataGridView1.Rows.Add(new[] { "", "", "","" }); 
    dataGridView1.Rows.Add(new[] { "L00000423", "", "" ,"B"}); 
    dataGridView1.Rows.Add(new[] { "Enter Amount", "", "", "" }); 
    dataGridView1.Rows.Add(new[] { "", "", "", "" }); 

    foreach (var row in dataGridView1.Rows) 
    { 
     var r = (DataGridViewRow) row; 
     foreach (var col in dataGridView1.Columns) 
     { 
      var cl = (DataGridViewColumn) col; 
      if (cl.Index == 3) 
      { 
       var cc = (DataGridViewComboBoxCell)dataGridView1[3,r.Index]; 
       if (r.Index % 3 != 0) 
       { 
        cc.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; 
        cc.ReadOnly = true; 
       } 
       else 
       { 
        cc.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton; 
        cc.ReadOnly = false; 
       } 
      } 
     } 
    } 
} 
+1

+1:bravo指出切換到WPF可能不實際,並不一定是答案每個用戶界面的問題。希望我也可以給+1獎勵作爲一個很好的答案。 – IAbstract

+0

爲什麼我不能使用這種方法綁定DataGridView?您已將A,B和C標記爲同一行。我在想,如果可以將A添加到從數據庫中獲取的那些行中,那麼B將爲將在循環中輸入的那些行輸入輸入數量。和C爲空白分隔符行。我可以將寬度設置爲最小。所以它不顯示,但我可以使用A,B,C作爲格式化的參考。可能嗎? – Arbaaz

+0

@Arbaaz你可以做到這一點,但如果你嘗試將行添加到數據綁定的datagridview中,你會得到一個異常:'當控件是數據綁定時,行不能以編程方式添加到DataGridView的行集合中。不要綁定datagridview,查詢你的數據庫,獲取數據,然後使用循環手動合併你的數據庫行和你的自定義行,就像你說的。這絕對有可能。 – Vland

相關問題