我想通过更改列标题DisplayIndex值来设置Silverlight数据网格中列标题的初始显示顺序。如果我尝试在页面加载时设置列顺序,则会出现超出范围的异常。如果我稍后设置列顺序(相同的例程),就像在按钮点击处理程序中一样,它可以工作。这只是Silverlight数据网格控件中的一个错误?建议可能的解决方法?Silverlight DataGrid异常重新排序列标题
1
A
回答
1
我猜你从页面加载事件中修改DataGrid中列的DisplayIndex时出现问题,因为它们尚未在此时创建。你不会说,但我假设你得到的DataGrid AutoGenerate你的列,否则你可以在定义DataGrid列时在你的XAML中设置DisplayIndex。
当DataGrid生成列时,它为每个列引发一个AutoGeneratingColumn事件,允许您修改其属性。这有点粗糙,但一种解决方案可能是使用为其创建列的PropertyName在此事件的处理程序中设置DisplayIndex。
private void grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
switch (e.PropertyName)
{
case "Name":
e.Column.DisplayIndex = 1;
break;
case "Age":
e.Column.DisplayIndex = 0;
break;
}
}
0
其实你需要订阅grid.Loaded事件和重排colums有:
public UserManagementControl()
{
InitializeComponent();
dataGridUsers.Loaded += new RoutedEventHandler(dataGridUsers_Loaded);
}
void dataGridUsers_Loaded(object sender, RoutedEventArgs e)
{
dataGridUsers.Columns[0].DisplayIndex = 1;
}
你有ArgumentOutOfRangeException因为控制尚未到目前为止
0
/// <summary>
/// Automation DataGrid Control - Columns Localization and Ordering
/// Option1: Localization of Columns Automatically
/// Option2: Ordering columns in DataGrid Automatically
/// </summary>
/// <param name="dataGrid"> DataGrid control</param>
/// <param name="ContractType"> Contract of Row DataItem
/// Example: typeof(ClientType)
/// </param>
/// <param name="columns"> Ordered Properties of Contract
/// Example: columns = "Id_Client,Client,GeographyItem,Flag_Approved,ClientType,ClientRelation,ClientPrestigeLevel"
/// </param>
public void AutomateDataGridColumns(DataGrid dataGrid, Type Contract, String columns)
{
try
{
List<String> OrderedColumns = columns.Split(new string[] { ",", "|", ";" }, StringSplitOptions.RemoveEmptyEntries).ToList();
//Buid Order of created COLUMNS
dataGrid.Loaded += (sndr, arg) =>
{
if (dataGrid.Columns.Count == OrderedColumns.Count && dataGrid.AutoGenerateColumns == true)
{
foreach (var item in dataGrid.Columns)
{
Int32 displayIndex = OrderedColumns.IndexOf(item.Header.ToString());
if (displayIndex != -1)
{ item.DisplayIndex = displayIndex; }
}
};
};
//DataGridColumn Localization
dataGrid.AutoGeneratingColumn += (sndr, arg) =>
{
LocalizeDataGridColumn(sndr as DataGrid, arg, Contract, OrderedColumns);
//We need To Update DataGrid after last Column Localized -->so Loaded event will be Raised/
// or ArgumentOutOfRange Exception will be thrown
if (dataGrid.Columns.Count == OrderedColumns.Count && dataGrid.AutoGenerateColumns == true)
{
dataGrid.UpdateLayout();
}
};
}
catch (Exception exc)
{ throw exc;
}
}
/// <summary>
/// DataGridColumn Control Localization
/// </summary>
/// <param name="dataGrid">Host DataGrid control </param>
/// <param name="arg">Auto Generated Column arg </param>
/// <param name="Contract">Type Contract</param>
/// <param name="localizationColumns">Ordered Properties to Contract </param>
protected void LocalizeDataGridColumn(DataGrid dataGrid, DataGridAutoGeneratingColumnEventArgs arg, Type Contract, List<String> localizationColumns)
{
try
{
DataGridColumn Column = arg.Column;
if (localizationColumns.Contains(Column.Header.ToString()))
{
// LOCALIZING Column.Header
// Check column local resource key exist
// CultureKeys - local Culture enum type
// SystemDispatcher - is My SL4 MEF Bootstrappper
// LocalizationService - is My Localization service in SL4
// if somebody is interested i can share more of my LocalizationService - use mail
CultureKeys currntCulture = SystemDispatcher.LocalizationService.CurrentCulture;
string ResourceKey = LocalResKeys.BoPropElmNameLoc.ToString() + "\\" + Contract.Name + @"|" + Column.Header.ToString();
if (SystemDispatcher.LocalizationService.CultureResources[currntCulture].Item2.ContainsKey(ResourceKey))
Column.Header = SystemDispatcher.LocalizationService.CultureResources[currntCulture].Item2[ResourceKey];
}
else
{ arg.Cancel = true;
}
}
catch (Exception exc)
{
throw exc;
}
}
相关问题
- 1. Silverlight 4 datagrid不重新排序
- 2. Datagrid中的列重新排序
- 3. Silverlight 4 Datagrid排序
- 4. WPF4 Datagrid不在列标题上排序
- 5. WPF DataGrid:重新排列行?
- 6. Silverlight的DataGrid标题结合常数
- 7. 排序/重新排序Primefaces Datagrid
- 8. Silverlight 4 - Datagrid排序和SelectionChanged问题
- 9. DataGrid排序/更新问题
- 10. 序列化异常WCF + Silverlight
- 11. Silverlight datagrid重新绑定整个列
- 12. Silverlight Datagrid数字排序
- 13. 在Silverlight中绑定DataGrid列标题
- 14. Silverlight 4的DataGrid列标题样式
- 15. 重新排序SlickGrid列重置列标题HTML
- 16. DataGrid标题排序方向图标
- 17. Silverlight DataGrid重绘问题
- 18. 标题样式datagrid silverlight
- 19. silverlight 3 Datagrid标题定制
- 20. WPF DataGrid的自定义排序:重新排列物品的ItemsSource
- 21. SAS:PROC TABULATE重新排列标题子组
- 22. 重新应用排序到DataGrid?
- 23. 重新排序列
- 24. Flex Advance datagrid日期列排序问题
- 25. Silverlight Datagrid:当该列被排序时突出显示整个列
- 26. 重新排列序列
- 27. 保存用户排序DataGrid Silverlight
- 28. Silverlight 4 DataGrid列
- 29. Dojo DataGrid(EnhancedGrid)排序问题
- 30. 问题排序的DataGrid
在装情况下,任何人仍然在意,是的:这个问题也会出现AutoGenerateColumns == false和no,在这种情况下,你不会得到任何AutoGeneratingColumn事件。不,Loaded事件也不起作用。在我的情况下,我通过处理LayoutUpdated事件并仅在我的ItemsSource长度> 0时更新显示索引来解决。祝您好运。 – 2015-02-09 10:47:39