我正在使用最新版本的.net壓縮框架構建一個小型vb應用程序。數據網格控件比我習慣的更有限。Windows Mobile/.Net Compact Framework - 如何將通用列表綁定到數據網格
我看到很多示例,我可以將網格的數據源綁定到數據集/數據表。是否可以綁定到通用列表?如果是這樣,怎麼樣?
我正在使用最新版本的.net壓縮框架構建一個小型vb應用程序。數據網格控件比我習慣的更有限。Windows Mobile/.Net Compact Framework - 如何將通用列表綁定到數據網格
我看到很多示例,我可以將網格的數據源綁定到數據集/數據表。是否可以綁定到通用列表?如果是這樣,怎麼樣?
您可以將列表添加到數據源,但是您需要做更多的工作才能讓列看起來像您想要的樣子。
我一直都在這樣做,但它有點涉及。請注意,我的示例使用.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);
}
而這個小類:
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;
}
}
也就是說設置,這裏是回報:以一個通用的清單,列表的名稱,以及它們的寬度:
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();
}
我不認爲有一種將通用列表綁定到數據網格的內置方式。但是,您可以很容易地創建一個從datagrid繼承的UserControl,並覆蓋/重載綁定方法以適應泛型列表。對此的基本方法是從通用列表生成DataTable,並將生成的DataTable綁定到基本數據網格。當然,這種方法是隻讀的。
如果您使用3.5或2.0,您可以使用BindingList。
如果我在我的dataso上執行了.ToArray(),我在MappingName上遇到了麻煩它工作正常。 – Dave 2010-12-31 15:17:26
不錯的工作。這爲我節省了很多痛苦 – Andrew 2011-03-30 07:59:00