Флажок в Инфраструктуре выиграть ультрагрид - PullRequest
8 голосов
/ 28 марта 2011

Я новичок в области инфраструктуры.В моем приложении winforms я использую Ultrawingrid для отображения данных из базы данных.

Как мне показать столбец с флажком в качестве первого столбца в сетке?Кроме того, мне нужно захватить событие check / uncheck и затем прочитать соответствующую строку / ячейки сетки в приложении.

Не могли бы вы помочь мне в этом?

Спасибо за чтение.

Ответы [ 2 ]

17 голосов
/ 28 марта 2011

Вам необходимо получить экземпляр UltraGridColumn для столбца, который вы хотите отобразить как флажок. Что-то вроде:

UltraGridColumn ugc = myGrid.DisplayLayout.Bands[0].Columns[@"myColumnKey"];

Затем измените стиль отображения столбца на флажок и убедитесь, что он позволяет редактировать:

ugc.Style = ColumnStyle.CheckBox;
ugc.CellActivation = Activation.AllowEdit;

По моему мнению, уместно иметь этот код инициализации сетки в обработчике для события формы Load или события InitializeLayout сетки.

Обработайте событие CellChange сетки, чтобы увидеть, когда пользователь изменяет значение флажка:

private void mygrid_CellChange(object sender, CellEventArgs e)
{
    if (StringComparer.OrdinalIgnoreCase.Equals(e.Cell.Column.Key, @"myColumnKey"))
    {
         // do something special when the checkbox value is changed
    }
}

В соответствии с запросом приведен пример кода, который демонстрирует добавление несвязанного столбца, перемещение его в крайнее левое положение, обработку события изменения ячейки и получение дополнительного значения из сетки.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=tempdb;Trusted_Connection=true"))
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter("select * from sysobjects", conn);
            conn.Open();
            da.Fill(ds); 
            ultraGrid1.DataSource = ds;
        }
    }

    private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
    {
        UltraGridColumn checkColumn = e.Layout.Bands[0].Columns.Add(@"checkColumnKey", @"caption");
        checkColumn.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox;
        checkColumn.CellActivation = Activation.AllowEdit;
        checkColumn.Header.VisiblePosition = 0;
    }

    private void ultraGrid1_CellChange(object sender, CellEventArgs e)
    {
        if (!StringComparer.Ordinal.Equals(e.Cell.Column.Key, @"checkColumnKey"))
        {
            return;
        }

        bool checkedState = bool.Parse(e.Cell.Text);

        DataRowView row = e.Cell.Row.ListObject as DataRowView;
        string name = row.Row[@"name"] as string;

        MessageBox.Show(string.Format("Checked={0}, name={1}", checkedState, e.Cell.Row.ListObject));
    }
}
2 голосов
/ 08 апреля 2011

почему бы не убедиться, что ваш слой данных возвращает Bool, сетка Infragistics автоматически (автоматически сгенерирует) флажок для него

...