SortDatagridviewColumnsbyTextInsteadofValue我的datagridview中的列之一是组合框列。我想按其显示值(即文本)而不是其值(在本例中为数据库中的整数列表)进行排序。我怎样才能做到这一点?您可以通过覆盖DataGridView上的SortCompare事件来实现:当DataGridView比较两个单元格值以执行排序操作时发生,并且始终按显示值而不是默认值排序。像这样将SortCompare事件连接到DataGridView:this.dataGridView1.SortCompare+=newDataGridViewSortCompareEventHandler(dataGridView1_SortCompare);然后通过每个Cell的FormattedValue属性而不是Value属性(这是默认值)排序将事件处理程序添加到所有列。voiddataGridView1_SortCompare(objectsender,DataGridViewSortCompareEventArgse){vardgv=(DataGridView)senderstringvalue1=dgv.Rows[e.RowIndex1].Cells[e.Column.Index].FormattedValue.ToString();字符串值2=dgv.Rows[e.RowIndex2].Cells[e.Column.Index].FormattedValue.ToString();e.SortResult=System.String.Compare(value1,value2);e.Handled=true;为我工作,希望它能帮助别人。我只是希望DataGridView上有一个设置,使其成为默认选项。这是不可能的。我就是这样做的。创建一个充满绑定值的虚拟列需要什么。您需要以编程方式执行此操作。privatevoidOrderByComboBoxColumn(){//如果临时列不存在则添加它if(!dataset.TABLE.Columns.Contains("TempColumn"))dataset.TABLE.Columns.Add("TempColumn",typeof(string));foreach(DataSetRowrowindataset.TABLE)row["TempColumn"]=GetBoundValue(row.COMBOBOX_ID);dataview.Sort="TempColumnASC";}privatestringGetBoundValue(intid){//获取字符串,但是你的id匹配绑定值returnstring;我将了解如何:在Windows窗体DataGridView控件中自定义排序。本文分为三种不同的类型。其他一些可能也有帮助的帖子:Howtosortadatabounddatagridviewwithacustomdataformat正如mnield所指出的,如果我们有一个ComboBox列并且用户希望能够添加行,则上面的代码将不起作用。如果用户希望能够添加新的行,那么我们应该使用下面的代码:DataGridViewComboBoxColumncol=(DataGridViewComboBoxColumn)dataGridView1.Columns[1];col.DataSource=项目;col.SortMode=DataGridViewColumnSortMode.Automatic;显然,这是不可能的。我一直在寻找同样的东西,我不确定为什么没有人认为这是一个重要的特性。这是原始问题的链接和MicrosoftRep的回答。http://www.webnewsgroups.net/vbnet/t25706-vb2005-sort-datagridview-text-formattedvalue-combobox-column-instead-underlying-value.aspx嗨马特,感谢发帖。如果DataGridView中有DataGridViewComboBoxColumn,则必须设置DataGridView的DataSource来填充数据。也就是说,您必须将DataGridView绑定到数据源。如果将DataGridViewComoboBoxColumn的SortMode设置为Automatic,则可以通过单击对列进行排序。排序是基于列中的单元格值,而不是FormattedValue。如果要根据FormattedValue对这一列进行排序,看来还得自定义排序。自定义排序DataGridView有几个选项。下面列出了这些选项。1.调用DataGridView.Sort(DataGridViewColumn,ListSortDirection)方法2.使用DataGridView的SortCompare事件处理3.调用DataGridView.Sort(IComparer)方法关于以上三个选项的更多信息,请参考以下链接:http://msdn2.microsoft.com/en-us/library/ms171608(d=ide).aspx使用DataView并设置其排序属性有关选项4的更多信息,请参见以下链接:http://msdn2.microsoft.com/en-us/library/system.data.dataview.sort(d=ide).aspx似乎只能应用选项2和选项3来根据FormattedValue对DataGridViewComboBoxColumn进行排序。但是,这两个选项仅在DataGridView未绑定到DataSource时才有效。所以在我看来,不可能根据FormattedValue对DataGridViewComboBoxColumn进行排序。如果您有其他疑虑,请随时告诉我。此致,LindaLiuMicrosoft在线社区支持实际上非常简单,下面是一个适用于我的示例代码:DataGridViewComboBoxColumncol=(DataGridViewComboBoxColumn)dataGridView1.Columns[1];col.DataSource=项目;col.SortMode=DataGridViewColumnSortMode.Automatic;三行是关键。DataGridViewComboBoxColumncol=(DataGridViewComboBoxColumn)dataGridView1.Columns[1];col.DataSource=项目;col.SortMode=DataGridViewColumnSortMode.Automatic;此代码仅允许按ID排序,而不是按ComboBox的文本排序。以上就是C#学习教程:Datagridview的列按文本而不是按值排序。分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收集,不代表侵权,如有涉及侵权,请点击右转联系管理员删除。如需转载请注明出处:
