none
请问datagridview空白区域如何处理比较美观? RRS feed

  • 问题

  • 当数据不足以填充datagridview时,空白区域会呈灰色背景,用户反应不美观。于是我增加了一些空行或/和空列来填充,这样看起来确实非常完美。

    但是在点击列头排序时会将空行排到上面来而把数据放到底部,而且填充空行、列会明显让程序变慢(我是填充datatable后再绑定datagridview)。

    请问填充空行或列是不是最好的方式?如果是,那么又如何让空行不参与排序呢?谢谢!

    2017年9月20日 15:59

答案


  • Hi leon1526,

    >>请问填充空行或列是不是最好的方式?

    时可以这样来增加。但是你加上排序这就不一定是一个很好的方式。

    1. 如果绑定了数据源......例如 DataTable  只能改数据源 DataTable行数来增加空白行。

    2.如果DataGridView是一条条Add进去的数据 是可以datagridview1.Rows.Add()方法添加空白行。

    你如果想用上面的方式来增加行,邮箱有排序,那么我感觉没有很好快捷的方式可以做到。

    下面的方式是一个比较笨拙的,但是也不失为一个参考思路。

    1: 当你在点击列表头的时候,将Table进行排序,然后作为新的数据源赋给DataGridView。

            string sortspar = "ASC";
            private void dataGridView2_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                RemoveEmpty(tavles);// 先去除空行,
                DataView dv = tavles.DefaultView;//排序
                if(sortspar== "ASC")
                {
                    dv.Sort = " ID DESC ";
                    sortspar = "DESC";
                }
                else
                {
                    dv.Sort = " ID ASC ";
                    sortspar = "ASC";
                }
                tavles = dv.ToTable();
                while (tavles.Rows.Count < 8)//增加空白行
                {
                    tavles.Rows.Add();
                }
                dataGridView2.DataSource = tavles;//绑定新数据源
            }
    
            protected void RemoveEmpty(DataTable dt)
            {
                List<DataRow> removelist = new List<DataRow>();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    bool IsNull = true;
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim()))
                        {
                            IsNull = false;
                        }
                    }
                    if (IsNull)
                    {
                        removelist.Add(dt.Rows[i]);
                    }
                }
                for (int i = 0; i < removelist.Count; i++)
                {
                    dt.Rows.Remove(removelist[i]);
                }
            }

    下面的文章或许对你有所帮助

    C# WinForm开发系列 - DataGridView 使用方法集锦:
    https://group.cnblogs.com/topic/40730.html

    注意:请记住通过标记有用的帖子作为答案来关闭您的主题,然后如果您有新问题,则启动新的主题。 请不要在同一个主题中提出几个问题。

    注意:此回复包含对第三方万维网站点的引用。 微软正在为您提供这方面的信息。 Microsoft不控制这些网站,并没有测试这些网站上发现的任何软件或信息; 因此,Microsoft不能对在那里发现的任何软件或信息的质量,安全性或适用性做任何陈述。 使用互联网上发现的任何软件都存在固有的危险,微软警告您确保在从因特网检索任何软件之前,您完全了解风险。

    Best Regards,

    Yohann Lu



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年9月21日 5:45
    版主