2011-08-30 52 views
0

我曾嘗試使用下面的方法填充datagridview的增加,我已經添加的按鈕欄太:份按鈕列在DataGridView中

private void populatedatagridview() 
{ 
    categorieslist(); 
    productgridview.RowTemplate.Height = 130; 

    var productsbycount = axe.products.GroupBy(x => x.product_Id).Select(a => new 
    { 
     productid = a.Key, 
     productnam = a.FirstOrDefault().product_Name, 
     productimage = a.FirstOrDefault().product_Image, 
     productdescr = a.FirstOrDefault().product_Description, 
     stockavailable = a.LongCount(), 
     productprice = a.FirstOrDefault().product_Price 
    }); 

    productbindingsource.DataSource = productsbycount; 
    productgridview.DataSource = productbindingsource;    
    DataGridViewButtonColumn column = new DataGridViewButtonColumn(); 
    productgridview.Columns.Add(column); 
    column.FlatStyle = FlatStyle.System; 
    column.DefaultCellStyle.ForeColor = Color.ForestGreen;   
    column.DefaultCellStyle.Padding = new Padding(10,48,10,48); 
    column.Text = "Buy"; 
    column.HeaderText = "Buy"; 
    column.UseColumnTextForButtonValue = true; 
    column.Name = "btnbuy"; 

    productgridview.Columns[0].Visible = false; 

    for (int i = 0 ; i < productgridview.Columns.Count; i++) 
     if (productgridview.Columns[i] is DataGridViewImageColumn) 
     { 
      ((DataGridViewImageColumn)productgridview.Columns[i]).ImageLayout = DataGridViewImageCellLayout.Stretch; 
      break; 
     } 

} 

我的問題是每當我調用這個函數,數據網格視圖增加了一個按鈕列,因此它會自動增加按鈕列的數量。

而我有一個組合框我想填充datagrid視圖取決於組合框文本。那時我也必須調用這個函數。

不幸的是,無論何時調用此函數,它都會自動添加按鈕列。有人會請幫助嗎?

productgridview.Columns.Add(column); 

我將會分離,從這些數據結合它的代碼格式化你的DataGridView代碼:

+0

會不會有人請幫助..... –

回答

2

更改此塊:

 DataGridViewButtonColumn column = new DataGridViewButtonColumn(); 
     productgridview.Columns.Add(column); 
     column.FlatStyle = FlatStyle.System; 
     column.DefaultCellStyle.ForeColor = Color.ForestGreen; 
     column.DefaultCellStyle.Padding = new Padding(10, 48, 10, 48); 
     column.Text = "Buy"; 
     column.HeaderText = "Buy"; 
     column.UseColumnTextForButtonValue = true; 
     column.Name = "btnbuy"; 

到:

if (productgridview.Columns["btnbuy"] == null) 
{ 
     DataGridViewButtonColumn column = new DataGridViewButtonColumn(); 
     productgridview.Columns.Add(column); 
     column.FlatStyle = FlatStyle.System; 
     column.DefaultCellStyle.ForeColor = Color.ForestGreen; 
     column.DefaultCellStyle.Padding = new Padding(10, 48, 10, 48); 
     column.Text = "Buy"; 
     column.HeaderText = "Buy"; 
     column.UseColumnTextForButtonValue = true; 
     column.Name = "btnbuy"; 
} 
+0

非常感謝+1爲你... –

0

你每次你的方法被調用,因爲你的方法將此列時獲得額外的列。運行一次格式化代碼的代碼,並運行需要時綁定數據的代碼。

您的populatedatagridview方法實際上是在做兩件事:查詢數據源並將查詢結果綁定到網格,並通過添加列和設置某些列的ImageLayout屬性來更改DataGridView的外觀。

我會刪除所有將網格外觀變爲新方法的代碼,並且只需調用一次即可,也可以在Form Load中調用。這使得populatedatagridview只負責填充DataGridView。

+0

我怎麼也得做,在單獨..... –

+0

你會請詳細說明..... –

+0

@ user89927更新,希望有所幫助。 –