Вам необходимо получить экземпляр 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));
}
}