是Infragistics的新手。 在我的winforms应用程序上,我使用Ultrawingrid显示数据库中的数据。
如何将复选框列显示为网格中的第一列? 此外,我需要捕获check / uncheck事件,然后读取应用程序中相应的网格行/单元格。
你能帮帮我吗?
感谢阅读。
答案 0 :(得分:17)
您需要获取要作为复选框呈现的列的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));
}
}
答案 1 :(得分:2)
为什么不确保你的数据层返回Bool,Infragistics网格会自动(自动生成)Check Box for it