动态改变GridView的宽度
2009-12-08 17:39
155 查看
【本文转帖】
我通常用GridView绑定datatable,由于需要动态绑定到不同的datatable所以需要动态调整GridView的宽度。所以写了这个函数实现该功能。GridView的宽度需要根据各个列中最大宽度来累加获得。在求各个列的最大字符宽度的时候需要对中文和英文加以区分,因为字符串“序号”和“id”的length属性都为2,但是显示的时候一个汉字占据的宽度却相当于2个英文字符。要想达到准确的显示效果,我对含有汉字的字符串根据汉字的数目确定该字符串等价英文字符的长度,例如字符串“序号id”的length属性为4,我自己通过函数获得的长度为6.确定了每列的最大字符数后,累加即可获得GridView的宽度字符,然后乘于一个字符在屏幕上的显示宽度oneLetterLength常量后就是GridView宽度。
我通常用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; }
相关文章推荐
- 动态改变GridView的宽度
- 动态改变GridView的宽度
- 根据Gridview中选择的项 动态改变数据
- 根据条件动态改变GridView某行或某个单元格的背景色---vb.net
- iOS--根据文本内容的长度动态改变label的宽度(有最大值)
- 动态改变ComboBox下拉框的宽度
- 【微信小程序教程】动态改变view标签的宽度和高度
- 鼠标拖动动态改变表格的宽度的js脚本 兼容ie/firefox
- JQuery 动态改变图片尺寸,不论宽度和高度单方面超出给定数值,IE6、IE7、IE8下正常
- Android中使用selector动态改变imageView或ImageButton的背景和在GridView中应用
- Android动态改变GridView的值【安卓进化二十二】
- 动态改变select option时,宽度自动变短解决方法
- 实现可动态改变宽度的表格简单方法
- ie7 动态改变select option时,宽度自动变短解决方法
- 根据条件动态改变GridView某行或某个单元格的背景色---vb.net
- 根据条件动态改变GridView某行或某个单元格的背景色
- 动态缩减table列时,table宽度自适应,tr下不同td数改变td的colspan属性值(IE8兼容)
- 动态改变gridview列宽度函数分享
- 鼠标拖动动态改变表格的宽度的js脚本 兼容ie/firefox
- 动态改变GridView的HeaderText的值