NoC*_*ier 4 datagrid compact-framework windows-mobile
我正在使用最新版本的.net紧凑框架构建一个小型vb应用程序.数据网格控件比我习惯的有限.
我看到很多例子,我可以将网格的数据源绑定到数据集/数据表.是否可以绑定到通用列表?如果是这样,怎么样?
Chr*_*sma 11
您可以将列表添加到数据源,但是您需要做更多的工作才能使列看起来像您想要的那样.
我实际上一直这样做,但它有点牵扯.请注意,我的示例使用.net 3.5和一些C#3.0功能,以使其更容易.
首先,这是我正在使用的扩展方法:
public static T SelectedItem<T>(this DataGrid ctrl)
{
var cell = ctrl.CurrentCell;
var list = (IList<T>)ctrl.DataSource;
if (list == null)
return default(T);
if (list.Count == 0)
return default(T);
return list[cell.RowNumber];
}
private static void AddColumn(this GridColumnStylesCollection list, string header, string columnName, int width)
{
list.Add(
new DataGridTextBoxColumn
{
HeaderText = header,
MappingName = columnName,
Width = width
});
return;
}
public static void SetColumnStyles<T>(this DataGrid ctrl, T data, params ColumnStyle[] column) where T : class
{
var ts = new DataGridTableStyle();
ts.MappingName = data.GetType().Name;
for (int i = 0; i < column.Length; i++)
{
var style = column[i];
ts.GridColumnStyles.AddColumn(style.Header, style.Column, style.Width);
}
ctrl.TableStyles.Clear();
ctrl.TableStyles.Add(ts);
}
Run Code Online (Sandbox Code Playgroud)
而这个小班:
public class ColumnStyle
{
public string Header { get; private set; }
public string Column { get; private set; }
public int Width { get; private set; }
public ColumnStyle(string header, string column, int width)
{
Header = header;
Column = column;
Width = width;
}
public ColumnStyle(string column, int width)
{
Column = column;
Header = column;
Width = width;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是设置,这是收益:采用通用列表,列出列名称及其宽度:
public void LoadInventoryList(IList<InventoryItemSmall> list)
{
inventoryGrid.SuspendLayout();
inventoryGrid.DataSource = list;
inventoryGrid.SetColumnStyles(list, new[]
{
new ColumnStyle("Name", 170),
new ColumnStyle("Size", 30),
new ColumnStyle("Quantity", 30)
});
inventoryGrid.ResumeLayout();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6765 次 |
最近记录: |