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

动态改变GridView的宽度_i++public  void SetGridViewWidth(GridView gridview1)
动态改变GridView的宽度_初始化_02动态改变GridView的宽度_中文字符_03        
...{
动态改变GridView的宽度_i++_04            
int rowcount = gridview1.Rows.Count;   //行数
动态改变GridView的宽度_i++_04
            int colcount = gridview1.Columns.Count;  //列数
动态改变GridView的宽度_i++_04
            int i=0,j=0;
动态改变GridView的宽度_i++_04            
int[] cellwidth = new int[colcount];   //数组用来存储各个列的最大字符数
动态改变GridView的宽度_i++_04
            int gridviewwidth = 0;  //GridView宽度
动态改变GridView的宽度_i++_04
            Unit width = 0;  
动态改变GridView的宽度_i++_04            
string temp = null;
动态改变GridView的宽度_i++_04            
int tempLength = 0;
动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04            
for (i = 0; i < rowcount; i++)     //循环数据项,获得各个列的最大字符宽度
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15
            ...{
动态改变GridView的宽度_i++_04                
for (j = 0; j < colcount; j++)
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                
...{
动态改变GridView的宽度_i++_04                    temp 
= gridview1.Rows[i].Cells[j].Text;
动态改变GridView的宽度_i++_04                    tempLength 
= LengthOfLetter(temp);      //LengthOfLetter()返回含中文的字符串字符宽度,1个汉字2个字符宽
动态改变GridView的宽度_i++_04
                    if (cellwidth[j] < tempLength)
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                    
...{
动态改变GridView的宽度_i++_04                        cellwidth[j] 
= tempLength;        //存储较大宽度值
动态改变GridView的宽度_动态绑定_25
                    }

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_动态绑定_25                }

动态改变GridView的宽度_动态绑定_25            }

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04           
动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04            
for (j = 0; j < colcount; j++)
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15            
...{
动态改变GridView的宽度_i++_04                
if (gridview1.HeaderRow.Visible == true)      //如果GridView表头可见,将表头列宽参与比较动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                ...{
动态改变GridView的宽度_i++_04                    temp 
= gridview1.HeaderRow.Cells[j].Text;
动态改变GridView的宽度_i++_04                    tempLength 
= LengthOfLetter(temp);
动态改变GridView的宽度_i++_04                    
if (cellwidth[j] < tempLength)
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                    
...{
动态改变GridView的宽度_i++_04                        cellwidth[j] 
= tempLength;
动态改变GridView的宽度_动态绑定_25                    }

动态改变GridView的宽度_动态绑定_25                }

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04                
if (gridview1.FooterRow.Visible == true)    //如果GridView表尾可见,将表尾列宽参与比较动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                ...{
动态改变GridView的宽度_i++_04                    temp 
= gridview1.FooterRow.Cells[j].Text;
动态改变GridView的宽度_i++_04                    tempLength 
= LengthOfLetter(temp);
动态改变GridView的宽度_i++_04                    
if (cellwidth[j] < tempLength)
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                    
...{
动态改变GridView的宽度_i++_04                        cellwidth[j] 
= tempLength;
动态改变GridView的宽度_动态绑定_25                    }

动态改变GridView的宽度_动态绑定_25                }

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_动态绑定_25            }

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04            
for (j = 0; j < colcount; j++)
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15            
...{
动态改变GridView的宽度_i++_04                
if (gridview1.Columns[j].Visible == true)     //将显示的列的各列最大字符宽度相加动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15                ...{
动态改变GridView的宽度_i++_04                    gridviewwidth 
+= cellwidth[j];
动态改变GridView的宽度_动态绑定_25                }

动态改变GridView的宽度_动态绑定_25            }

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

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_字符串_79        }

动态改变GridView的宽度_i++
动态改变GridView的宽度_i++
动态改变GridView的宽度_i++
动态改变GridView的宽度_i++       
//含有中文的字符串等效英文字符串显示长度
动态改变GridView的宽度_i++

动态改变GridView的宽度_i++        
public  int LengthOfLetter(string temp)  
动态改变GridView的宽度_初始化_02动态改变GridView的宽度_中文字符_03        
...{
动态改变GridView的宽度_i++_04            
int length = temp.Length;
动态改变GridView的宽度_i++_04            
int newlength = temp.Length;
动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04            
for (int i = 0; i < length; i++)         //遍历字符串每个字符
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15
            ...{
动态改变GridView的宽度_i++_04                
if (IsChineseLetter(temp, i))     //IsChineseLetter()判断是否为中文字符,是则宽度加1
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15
                ...{
动态改变GridView的宽度_i++_04                    newlength
++;
动态改变GridView的宽度_动态绑定_25                }

动态改变GridView的宽度_动态绑定_25            }

动态改变GridView的宽度_i++_04            
return newlength;
动态改变GridView的宽度_i++_04
动态改变GridView的宽度_字符串_79        }

动态改变GridView的宽度_i++
动态改变GridView的宽度_i++
动态改变GridView的宽度_i++   
//判断是否为中文字符
动态改变GridView的宽度_i++
     public  bool  IsChineseLetter(string input,int index)
动态改变GridView的宽度_初始化_02动态改变GridView的宽度_中文字符_03        
...{
动态改变GridView的宽度_i++_04            
int code = 0;
动态改变GridView的宽度_i++_04            
int chfrom = Convert.ToInt32("4e00"16);    //范围(0x4e00~0x9fff)转换成int(chfrom~chend)
动态改变GridView的宽度_i++_04
            int chend = Convert.ToInt32("9fff"16);
动态改变GridView的宽度_i++_04            
if (input != "")
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15            
...{
动态改变GridView的宽度_i++_04                code 
= Char.ConvertToUtf32(input, index);    //获得字符串input中指定索引index处字符unicode编码
动态改变GridView的宽度_i++_04
                
动态改变GridView的宽度_i++_04               
if (code >= chfrom && code <= chend)     
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15               
...{
动态改变GridView的宽度_i++_04                    
return true;     //当code在中文范围内返回true
动态改变GridView的宽度_i++_04

动态改变GridView的宽度_动态绑定_25                }

动态改变GridView的宽度_i++_04               
else
动态改变GridView的宽度_初始化_14动态改变GridView的宽度_初始化_15               
...{
动态改变GridView的宽度_i++_04                     
return false ;    //当code不在中文范围内返回false
动态改变GridView的宽度_动态绑定_25
               }

动态改变GridView的宽度_动态绑定_25            }

动态改变GridView的宽度_i++_04
动态改变GridView的宽度_i++_04            
return false;
动态改变GridView的宽度_字符串_79        }