请教c# winform中的,DatagridView 最后一行不排序

xiehuangda 2012-05-10 04:23:02
请教c# winform中的,DatagridView 最后一行不排序

在 DatagridView中,最后一行是用来做合计的。
所以点击排序的时候,希望,最后一行不排序。


我读数据填充到 DatagridView 中的格式是下面的方法

string sql = "Select * From biao";
DataSet ds = new DataSet();
SqlDataAdapter da;
da = new SqlDataAdapter(sql, Conn.rs);
da.Fill(ds, "biao");
dgv1.DataSource = ds.Tables["biao"];


请教各位,怎样才能做到最后一行不参加排序。
给一个简单点代码。谢谢!
...全文
546 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiehuangda 2012-09-22
  • 打赏
  • 举报
回复
后来还是自己解决问题了,首先在DGV里设置启用插入。
然后,再以下的参数里写入以下对应的代码即可。
有需要的朋友,可以COPY来用。




private void DGV_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
//有数据时取消默认选中第一行
if (this.DGV.Rows.Count > 0)
{
this.DGV.Rows[0].Selected = false;
}

//在首列自动排序号
for (int i = 0; i < DGV.Rows.Count; i++)
{
int j = i + 1;
DGV.Rows[i].HeaderCell.Value = j.ToString();
DGV.Rows[this.DGV.Rows.Count - 1].HeaderCell.Value = j.ToString("合计");//最后一行显示合计
}

//底部合计
Double he1 = 0;//积分
Double he2 = 0;//余额
Double he3 = 0;//金额
for (Int32 ih = 0; ih < DGV.Rows.Count - 1; ih++)
{
he1 += Convert.ToDouble(this.DGV.Rows[ih].Cells["Score"].Value);//积分
he2 += Convert.ToDouble(this.DGV.Rows[ih].Cells["Yue"].Value);//余额
he3 += Convert.ToDouble(this.DGV.Rows[ih].Cells["Mem_fst_amt"].Value);//金额
}
DataGridViewRow dgr = DGV.Rows[DGV.Rows.Count - 1];
dgr.Cells["Score"].Value = he1;////积分
dgr.Cells["Yue"].Value = he2;//余额
dgr.Cells["Mem_fst_amt"].Value = he3;//金额
}


private void DGV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
//设置最后一行,合计行的参数
DataGridViewRow dgr = DGV.Rows[DGV.Rows.Count - 1];
dgr.DefaultCellStyle.BackColor = Color.FromArgb(227, 244, 255);//背景颜色
dgr.DefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold);//字体大小
dgr.DefaultCellStyle.ForeColor = Color.DodgerBlue;//字体颜色
}



private void DGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//设定DGV,值符合的行,字体颜色,最后一行除外
for (int i = 0; i < DGV.Rows.Count - 1; i++)
{
//亏本销售
if ((int)DGV.Rows[i].Cells["Addssl"].Value != 0 && (decimal)DGV.Rows[i].Cells["Addyl"].Value < 0)
{
DGV.Rows[i].DefaultCellStyle.ForeColor = Color.Red;//红色
}
}
}




private void DGV_CellClick(object sender, DataGridViewCellEventArgs e)
{
//单击取消选中最后一行.必须取消,否则全选时,双击就出错
DGV.Rows[this.DGV.Rows.Count - 1].Selected = false;
}


wepwep 2012-05-13
  • 打赏
  • 举报
回复
其实确实是用2个grid比较好,这样能够保证统计行始终显示,列宽度改变只需要在上面grid的列宽改变事件写点代码就能实现了,当然最好还能自己做个竖着的滚动条,这样就完美了。
请叫我卷福 2012-05-11
  • 打赏
  • 举报
回复
string sql = "Select * From biao";
DataSet ds = new DataSet();
SqlDataAdapter da;
da = new SqlDataAdapter(sql, Conn.rs);
da.Fill(ds, "biao");
dgv1.DataSource = ds.Tables["biao"];

去掉 ds.Tables["biao"]中的最后一行,再绑定到dgv1
每次排序后 再在最后一行手动添加一个统计行 dgv1.rows.add(...);
  • 打赏
  • 举报
回复
最后一行如果是合计,不要和GridView的明细数据一起Bind。单独显示它。
GridView正常排序……
xiehuangda 2012-05-11
  • 打赏
  • 举报
回复
如果那样做,客户拉开的时候,宽度,就不一样了。
polk6 2012-05-10
  • 打赏
  • 举报
回复
为什么不在显示数据的DatagridView下面做一个小的DatagridView。
2者的宽度一样,下面就当做上上面先添加的一行。
xiehuangda 2012-05-10
  • 打赏
  • 举报
回复
请教,大家
wepwep 2012-05-10
  • 打赏
  • 举报
回复
参考DataGridViewColumnSortMode.Programmatic,这是用编程方式排序,你增加一个隐藏列,普通行值=0,统计行值=1,排序的话就按隐藏列+用户点击的列排序既可以。
xiehuangda 2012-05-10
  • 打赏
  • 举报
回复
请教大家
槑党--一缕风 2012-05-10
  • 打赏
  • 举报
回复
你们也太勤奋了吧, 都几点了还在敲代码?
xiehuangda 2012-05-10
  • 打赏
  • 举报
回复
能写详细点代码出来吗?

我想要,排序还是可以排,只不过,最底下一行不参加排序。
其他数据照样能排序。

最底下一行是用来做合计的。所以不参加排序。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧