c#、silverlight でアプリケーションを作成しています。自動生成された後、データグリッド内の列を並べ替える方法を見つけようとしています。
私はこのようなことをしてみました:
private void dataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
switch (e.PropertyName)
{
case "taskName":
{
e.Column.DisplayIndex = 0;
break;
}
case "overallPercentComplete":
{
e.Column.DisplayIndex = 1;
break;
}
case "TDO_ID":
{
e.Column.DisplayIndex = 2;
break;
}
case "WBS_ID":
{
e.Column.DisplayIndex = 3;
break;
}
case "baseLineSD":
{
e.Column.DisplayIndex = 4;
break;
}
case "baseLineEd":
{
e.Column.DisplayIndex = 5;
break;
}
case "estimatedSD":
{
e.Column.DisplayIndex = 6;
break;
}
case "estimatedED":
{
e.Column.DisplayIndex = 7;
break;
}
case "IMS_Hours":
{
e.Column.DisplayIndex = 8;
break;
}
case "ETC_Hours":
{
e.Column.DisplayIndex = 9;
break;
}
}
}
これは正確には正しく動作しません。このデータグリッドの場合、順序は次のようになります: taskName、overallPercentComplete、TDO_ID、WBS_ID、baseLineSD、baseLineED、estimatedSD、estimatedED、IMS_Hours、ETC_Hours。
Column.DisplayIndex プロパティを変更して、正しく設定することを考えました。ただし、このコードが実際に実行されると、順序は次のとおりです。
何か案は?どんな助けでも大歓迎です。前もって感謝します。
*編集*
void dataGrid1_Loaded(object sender, RoutedEventArgs e)
{
dataGrid1.Columns[0].DisplayIndex = 6;
dataGrid1.Columns[1].DisplayIndex = 7;
dataGrid1.Columns[2].DisplayIndex = 8;
dataGrid1.Columns[3].DisplayIndex = 9;
dataGrid1.Columns[4].DisplayIndex = 4;
dataGrid1.Columns[5].DisplayIndex = 5;
dataGrid1.Columns[6].DisplayIndex = 3;
dataGrid1.Columns[7].DisplayIndex = 2;
dataGrid1.Columns[8].DisplayIndex = 0;
dataGrid1.Columns[9].DisplayIndex = 1;
}
まだ何もありませんが、Loaded イベント ハンドラーを使用するとエラーが発生します。
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Error Details:
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.Generic.List`1.get_Item(Int32 index)
at System.Collections.ObjectModel.Collection`1.get_Item(Int32 index)
at camDashboard.Views.Details.dataGrid1_Loaded(Object sender, RoutedEventArgs e)
at MS.Internal.CoreInvokeHandler.InvokeEventHandler(UInt32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)