动态改变gridview列宽度函数分享

所属分类: 软件编程 / C#教程 阅读数: 97
收藏 0 赞 0 分享

我通常用GridView绑定datatable,由于需要动态绑定到不同的datatable所以需要动态调整GridView的宽度。所以写了这个函数实现该功能。GridView的宽度需要根据各个列中最大宽度来累加获得。在求各个列的最大字符宽度的时候需要对中文和英文加以区分,因为字符串“序号”和“id”的length属性都为2,但是显示的时候一个汉字占据的宽度却相当于2个英文字符。要想达到准确的显示效果,我对含有汉字的字符串根据汉字的数目确定该字符串等价英文字符的长度,例如字符串“序号id”的length属性为4,我自己通过函数获得的长度为6.确定了每列的最大字符数后,累加即可获得GridView的宽度字符,然后乘于一个字符在屏幕上的显示宽度oneLetterLength常量后就是GridView宽度。

复制代码 代码如下:

public  void SetGridViewWidth(GridView gridview1)
        {
            int rowcount = gridview1.Rows.Count;   //行数
            int colcount = gridview1.Columns.Count;  //列数
            int i=0,j=0;
            int[] cellwidth = new int[colcount];   //数组用来存储各个列的最大字符数
            int gridviewwidth = 0;  //GridView宽度
            Unit width = 0; 
            string temp = null;
            int tempLength = 0;

            for (i = 0; i < rowcount; i++)     //循环数据项,获得各个列的最大字符宽度
            {
                for (j = 0; j < colcount; j++)
                {
                    temp = gridview1.Rows[i].Cells[j].Text;
                    tempLength = LengthOfLetter(temp);      //LengthOfLetter()返回含中文的字符串字符宽度,1个汉字2个字符宽
                    if (cellwidth[j] < tempLength)
                    {
                        cellwidth[j] = tempLength;        //存储较大宽度值
                    }

                }
            }

          

            for (j = 0; j < colcount; j++)
            {
                if (gridview1.HeaderRow.Visible == true)      //如果GridView表头可见,将表头列宽参与比较                {
                    temp = gridview1.HeaderRow.Cells[j].Text;
                    tempLength = LengthOfLetter(temp);
                    if (cellwidth[j] < tempLength)
                    {
                        cellwidth[j] = tempLength;
                    }
                }

                if (gridview1.FooterRow.Visible == true)    //如果GridView表尾可见,将表尾列宽参与比较                {
                    temp = gridview1.FooterRow.Cells[j].Text;
                    tempLength = LengthOfLetter(temp);
                    if (cellwidth[j] < tempLength)
                    {
                        cellwidth[j] = tempLength;
                    }
                }

            }


            for (j = 0; j < colcount; j++)
            {
                if (gridview1.Columns[j].Visible == true)     //将显示的列的各列最大字符宽度相加                {
                    gridviewwidth += cellwidth[j];
                }
            }

            width = gridviewwidth * oneLetterLength;  //GridView最大字符数乘于一个字符显示宽度得到GridView显示宽度
            if (gridview1.Width.Value < width.Value)    //如果在界面上已经设置了GridView的宽度,将动态求的宽度和页面上的
               {                                                              //初始化宽度比较,如果初始化宽度较小则将宽度设置为新调整的宽度。
                     gridview1.Width = width;
                }

        }

 

       //含有中文的字符串等效英文字符串显示长度

        public  int LengthOfLetter(string temp) 
        {
            int length = temp.Length;
            int newlength = temp.Length;

            for (int i = 0; i < length; i++)         //遍历字符串每个字符
            {
                if (IsChineseLetter(temp, i))     //IsChineseLetter()判断是否为中文字符,是则宽度加1
                {
                    newlength++;
                }
            }
            return newlength;

        }


   //判断是否为中文字符
     public  bool  IsChineseLetter(string input,int index)
        {
            int code = 0;
            int chfrom = Convert.ToInt32("4e00", 16);    //范围(0x4e00~0x9fff)转换成int(chfrom~chend)
            int chend = Convert.ToInt32("9fff", 16);
            if (input != "")
            {
                code = Char.ConvertToUtf32(input, index);    //获得字符串input中指定索引index处字符unicode编码

               if (code >= chfrom && code <= chend)    
               {
                    return true;     //当code在中文范围内返回true

                }
               else
               {
                     return false ;    //当code不在中文范围内返回false
               }
            }

            return false;
        }

更多精彩内容其他人还在看

C#抽象类与抽象方法详解

这篇文章主要为大家详细介绍了C#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多