DataGridView排序..

在使用过程中..DataGridView的列为字符类型..



dataGridView1.Columns.Add(
"123", "33");
dataGridView1.Rows.Add(
8);
dataGridView1.Rows[
0].Cells[0].Value = "10";
dataGridView1.Rows[
1].Cells[0].Value = "5";
dataGridView1.Rows[
2].Cells[0].Value = "11278.0";
dataGridView1.Rows[
3].Cells[0].Value = "201";
dataGridView1.Rows[
4].Cells[0].Value = "22";
dataGridView1.Rows[
5].Cells[0].Value = "320";
dataGridView1.Rows[
6].Cells[0].Value = "1.45";
dataGridView1.Rows[
7].Cells[0].Value = "0.950";

我们要对这样的列进行排序

使用 ColumnHeaderMouseClick事件

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 0)
{
//System.Windows.Forms.DataGridViewColumnHeaderCell
if (dataGridView1.Columns[0].HeaderCell.SortGlyphDirection == SortOrder.Ascending)
{
dataGridView1.Columns[
0].HeaderCell.SortGlyphDirection = SortOrder.Descending;
dataGridView1.Sort(
new DataGridViewComparer(dataGridView1.Columns[0]));
}
else
{
dataGridView1.Columns[
0].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
dataGridView1.Sort(
new DataGridViewComparer(dataGridView1.Columns[0]));
}
}
}

具体代码

/// <summary>
/// DataGridView排序

/// zgke@sina.com

/// qq:116149
/// </summary>
public class DataGridViewComparer : IComparer
{

private DataGridViewColumn m_Column;

/// <summary>
/// dataGridView1.Columns[0].HeaderCell.SortGlyphDirection = SortOrder.Descending; 根据这个进行排序列
/// </summary>
/// <param name="p_Column"></param>
public DataGridViewComparer(DataGridViewColumn p_Column)
{
m_Column
= p_Column;
}
int IComparer.Compare(Object x, Object y)
{
if (m_Column == null) return -1;
decimal _X;
decimal _Y;

bool _XConvert = decimal.TryParse(((DataGridViewRow)x).Cells[m_Column.Name].Value.ToString(), out _X);
bool _YConvert = decimal.TryParse(((DataGridViewRow)y).Cells[m_Column.Name].Value.ToString(), out _Y);
int _CompareValue = _X.CompareTo(_Y);

if (m_Column.HeaderCell.SortGlyphDirection == SortOrder.Descending) return _CompareValue * -1;

return _CompareValue;
}
}

private void LogToDataView(DataTable showTable = null) { if (showTable == null) { showTable = WorkLog.getTodayLog(); } if (showTable != null) { try { if (dataGridView2.DataSource == null) { MDataGridView.DataGridViewChangeTheme(dataGridView2); dataGridView2.DataSource = showTable; //// 按百分比设置列宽 dataGridView2.Columns[0].FillWeight = 5; dataGridView2.Columns[1].FillWeight = 15; dataGridView2.Columns[2].FillWeight = 5; dataGridView2.Columns[3].FillWeight = 10; dataGridView2.Columns[4].FillWeight = 10; dataGridView2.Columns[5].FillWeight = 60; dataGridView2.DefaultCellStyle.ForeColor = Color.Black; dataGridView2.Columns[0].Visible = false; string msg = "初始化log表\r\n"; File.AppendAllText(Application.StartupPath + "\\errorlog_" + DateTime.Now.ToString("yyyyMMdd") + ".txt", DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss]") + msg); } else { dataGridView2.DataSource = null; dataGridView2.DataSource = showTable; string msg = $"刷新显示log表{showTable.Rows.Count}\r\n"; File.AppendAllText(Application.StartupPath + "\\errorlog_" + DateTime.Now.ToString("yyyyMMdd") + ".txt", DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss]") + msg); } dataGridView2.Sort(dataGridView2.Columns[0], ListSortDirection.Descending); if (showTable.Rows.Count > 0) { DateTime date = DateTime.Parse(showTable.Rows[0][1].ToString()); label26.Text = date.ToString("yyyy年MM月dd日 - 工作日志"); } else { label26.Text = DateTime.Now.ToString("yyyy年MM月dd日 - 工作日志"); } } catch (Exception ex) { string msg = $"log表加载出错:{ex.StackTrace}\r\n"; File.AppendAllText(Application.StartupPath + "\\errorlog_" + DateTime.Now.ToString("yyyyMMdd") + ".txt", DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss]") + msg); } } else { string msg = $"获取log表为空\r\n"; File.AppendAllText(Application.StartupPath + "\\errorlog_" + DateTime.Now.ToString("yyyyMMdd") + ".txt", DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss]") + msg); } }执行到dataGridView2.Columns[0].FillWeight,但抛出了索引超出界限的异常,如何修改解决
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值