排序一个DevExpress XtraGrid的图像列
本文关键字:XtraGrid 图像 DevExpress 一个 排序 | 更新日期: 2023-09-27 17:54:41
这个任务似乎很容易。
我想允许XtraGrid按图像列排序(图像代表状态)
根据手册,您只需要将列排序模式设置为Custom,并在CustomColumnSort eventandler中放入一点代码。
这里它没有工作,事件处理程序从未被调用。
我明确地尝试了以下操作:
gridViewLeftGrid.Columns["ImageColumnName"].OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True;
gridView.Columns["ImageColumnName"].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
gridView.CustomColumnSort += gridView_CustomColumnSort;
gridView.CustomColumnGroup += grid_CustomColumnGroup;
void gridView_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
throw new NotImplementedException();
}
但是仍然- gridView_CustomColumnSort的断点永远不会到达。
我看到的唯一影响是,现在每次当网格加载或更新时,从DevExpress.Data.Storage.DataStorageObjectComparer.CompareRecordsCode
抛出一个错误:
"至少有一个对象应该实现iccompare "
有谁能帮上忙吗?
您的数据源应该按顺序实现IXtraSortable接口要实现所需的排序
检查Devex支持问题
我建议您通过ColumnView。CustomColumnSort事件文档,并查看以下行:
自定义比较的结果应该设置为CustomColumnSortEventArgs。结果参数如下所示:
- 如果数据按升序排序时,第一行应该位于第二行之上,则将Result设置为-1。当数据按降序排序时,第一行将位于第二行以下。
- 如果按升序排序数据时,第一行应位于第二行以下,则将Result设置为1。当数据按降序排序时,第一行将位于第二行之上。
- 将"结果"设置为0,表示行相等。在这种情况下,将根据数据源中的索引在网格中排列行。
注意:
CustomColumnSortEventArgs。如果当前比较操作为handled
,则处理参数应设置为true
。您可以将此参数设置为false,以便在事件处理程序完成后调用默认的比较机制。在这种情况下,将忽略自定义比较操作的结果。
检查示例:
protected void grid_CustomColumnSort
(object sender, DevExpress.Web.ASPxGridView.CustomColumnSortEventArgs e) {
if (e.Column.FieldName == "Country") {
e.Handled = true;
string s1 = e.Value1.ToString(), s2 = e.Value2.ToString();
if (s1.Length > s2.Length)
e.Result = 1;
else
if (s1.Length == s2.Length)
e.Result = Comparer.Default.Compare(s1, s2);
else
e.Result = -1;
}
}
你也可以像这样在事件上实现比较代码:
if (e.Column.FieldName == "Importance")
{
int n1 = (int)gridControl1.GetCellValue(e.ListSourceRowIndex1, "Rank");
int n2 = (int)gridControl1.GetCellValue(e.ListSourceRowIndex2, "Rank");
e.Result = Comparer<int>.Default.Compare(n1, n2); /// comparator here, that set the e.result
e.Handled = true;
}
引用:
如何:实现自定义排序
DXGrid CustomColumnSort排序不正确
CustomColumnSort不工作
ASPxGridView -如何排序组-它是关于asp.net网格,但可能是有帮助的
查看引发自定义排序事件的代码片段,请参考这篇知识库文章-如何实现自定义排序。希望有帮助:
public partial class GridCustomSortTest : Form
{
public GridCustomSortTest()
{
InitializeComponent();
}
private void GridCustomSortTest_Load(object sender, EventArgs e)
{
string[] months = new string[] { "January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November", "December" };
grid.DataSource = months;
grid.RefreshDataSource();
gridView1.Columns[0].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
gridView1.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(gridView1_CustomColumnSort);
}
void gridView1_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
e.Result = Comparer<int>.Default.Compare(e.ListSourceRowIndex1,
e.ListSourceRowIndex2);
e.Handled = true;
}
}