- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道 XtraGrid 和 BandedGrid 如何协同工作并绑定(bind)到底层数据。 documentation有一些解释性的 tl;dr-text 但我缺少一个完整的工作示例来在代码中设置它。所以我花了大约 2 个小时才弄明白。基于this blog entry 我想在这里发布我的答案。
如果有更好的方法将各个部分组合在一起,就像我在下面的回答中那样,我很想知道。
最佳答案
首先,您必须知道可以将普通 DataTable 绑定(bind)到 XtraGrid,并且带状网格的创建是独立的。
您可以在下面看到创建了一个新的 XtraGrid
实例。它的 MainView 被设置为 BandedGridView
private void LoadAndFillXtraGrid() // object sender, EventArgs e
{
grid = new DevExpress.XtraGrid.GridControl();
grid.Dock = DockStyle.Fill;
// set the MainView to be the BandedGrid you are creating
grid.MainView = GetBandedGridView();
// set the Datasource to a DataTable
grid.DataSource = GetDataTable();
// add the grid to the form
this.Controls.Add(grid);
grid.BringToFront();
}
在 grid.MainView = GetBandedGridView();
行上方,将 BandedGridView 设置为 Xtragrid 的 MainView。下面你会看到如何创建这个 BandedGridView
//Create a Banded Grid View including the grindBands and the columns
private BandedGridView GetBandedGridView()
{
BandedGridView bandedView = new BandedGridView();
// Set Customer Band
SetGridBand(bandedView, "Customer",
new string[3] { "CustomerId", "LastName", "FirstName" });
SetGridBand(bandedView, "Address", new string[3] { "PLZ", "City", "Street" });
return bandedView;
}
要设置 GridBand,您必须创建一个 GridBand 并通过为每一列调用 bandedView.Columns.AddField
将其附加到 bandedGridView
private void SetGridBand(BandedGridView bandedView, string gridBandCaption
, string[] columnNames)
{
var gridBand = new GridBand();
gridBand.Caption = gridBandCaption;
int nrOfColumns = columnNames.Length;
BandedGridColumn[] bandedColumns = new BandedGridColumn[nrOfColumns];
for (int i = 0; i < nrOfColumns; i++)
{
bandedColumns[i] = (BandedGridColumn)bandedView.Columns.AddField(columnNames[i]);
bandedColumns[i].OwnerBand = gridBand;
bandedColumns[i].Visible = true;
}
}
DataSource 可以是包含一些列的普通 DataTable。如果数据表中列的名称与 BandedGridColumn 的名称匹配,则将自动映射。如您所见,我在数据表中添加了一列 NotMapped
,这在上面的屏幕截图中是不可见的:
private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("CustomerId", typeof(Int32)),
new DataColumn("NotMapped", typeof(Int32)),
new DataColumn("LastName", typeof(String)),
new DataColumn("FirstName", typeof(String)),
new DataColumn("PLZ", typeof(Int32)),
new DataColumn("City", typeof(String)),
new DataColumn("Street", typeof(String))
});
dt.Rows.Add(1, 0, "John", "Barista", 80245, "Manhatten", "Broadway");
dt.Rows.Add(2, 0, "Mike", "Handyman", 87032, "Brooklyn", "Martin Luther Drive");
dt.Rows.Add(3, 0, "Jane", "Teacher", 80245, "Manhatten", "Broadway 7");
dt.Rows.Add(4, 0, "Quentin", "Producer", 80245, "Manhatten", "Broadway 15");
return dt;
}
如果有人有更优雅的方式将各个部分组合在一起,我很想知道。
关于winforms - 为 DevExpress XtraGrid 创建 BandedGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16717322/
我想知道 XtraGrid 和 BandedGrid 如何协同工作并绑定(bind)到底层数据。 documentation有一些解释性的 tl;dr-text 但我缺少一个完整的工作示例来在代码中设
我正在为 WinForms 使用 BandedGridView。我只在运行时获得有关 BandedGridView 结构(带数和列数)的信息。所以我必须手动填写它。我可以正确地创建完整的结构,但我不明
我是一名优秀的程序员,十分优秀!