2010-11-08 39 views
0

我想啓用/禁用在我的網格控件的每一行中找到的按鈕。我不確定我如何通過代碼訪問它。我認爲這將是GridView1方法.....訪問網格控制中的按鈕Prgrammically DevExpress

+0

能否請你解釋一下你添加按鈕到gridControl行?另外,請解釋您爲什麼需要訪問這些按鈕。 – 2010-11-08 20:02:11

+0

我通過在網格控件中創建一個新列來添加按鈕,並將columnEdit屬性設置爲一個簡單的按鈕。我需要訪問啓用按鈕的屬性,當表單根據另一個列值加載時,每行可能會或可能不會啓用按鈕。 – 2010-11-08 21:05:06

回答

1

只需處理顯示編輯器事件即可禁用該按鈕(或者更好的是,對特定單元格的整個編輯)......然後,您可以檢查其他列的值,然後根據您的意願取消該單元格的編輯。這裏有一些示例程序的代碼,告訴你如何做到這一點:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using DevExpress.XtraGrid.Views.Grid; 
using DevExpress.XtraGrid; 

namespace GridButtonDisable 
{ 

public partial class Form1 : Form 
{ 
    public class MyData 
    { 
     public int Number { get; set; } 
     public bool Even { get { return Number % 2 == 0; } } 
    } 

    public Form1() 
    { 
     InitializeComponent(); 

     List<MyData> List = new List<MyData> 
     { 
      new MyData() { Number = 1 }, 
      new MyData() { Number = 2 }, 
      new MyData() { Number = 5 }, 
      new MyData() { Number = 7 }, 
      new MyData() { Number = 10 }, 
     }; 

     gridControl1.DataSource = List; 
     gridView1.ShowingEditor += gridView1_ShowingEditor; 
    } 

    private void gridView1_ShowingEditor(object sender, CancelEventArgs e) 
    { 
     GridView view = sender as GridView; 
     if (view.FocusedColumn.Name == "gridButtonCol" && 
      !(bool)view.GetRowCellValue(view.FocusedRowHandle, "Even")) 
      e.Cancel = true; 
    } 
} 

這是一個非常簡單的程序。你必須假定你的按鈕編輯欄被命名爲gridButtonCol ...我測試了我爲這個示例創建的MyData類的Even列的值,你可以做任何你想要的,並檢查你喜歡的任何條件。

如果設置了ShowingEditor事件的CancelEventArgs的e.Cancel屬性,細胞將無法修改和按鈕編輯器將不會對用戶點擊迴應...