silverlight 后台代码生成gridview
/// <summary> /// 后台代码生成gridview /// </summary> /// <param name="columnList">依次存 name txt width 3项的数组,分别是field,标题,宽度(宽度为0则自己计算宽度)</param> /// <param name="dataGridName">生成的datagrid的id</param> /// <returns></returns> private DataGrid CreateDataGrid(List<string[]> columnList, int byteWidth) { //建立datagrid 并设置datagrid属性 DataGrid dgrid = new DataGrid(); dgrid.HorizontalAlignment = HorizontalAlignment.Left; dgrid.VerticalAlignment = VerticalAlignment.Top; dgrid.AutoGenerateColumns = false; dgrid.Margin = new Thickness(5,5,5,5); dgrid.Width = 900; dgrid.Height = 340; dgrid.IsReadOnly = false; dgrid.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible; dgrid.VerticalScrollBarVisibility = ScrollBarVisibility.Visible; //获取所有的Header字符 StringBuilder strHeadersNoWidth = new StringBuilder(); StringBuilder strHeadersWithWidth = new StringBuilder(); int WidthSet = 0; foreach (string[] col in columnList) { //第三项为宽度,如果宽度==0那么程序自己搞,如果宽度>0那么按照传入的进行 if (col[2].ToString() == "0" || col[2].ToString().Trim() == "") { strHeadersNoWidth.Append(col[1]); } else { WidthSet = WidthSet + int.Parse(col[2]); } } //计算所有的Header字符总长需要占用多少像素,然后用DataGrid的宽度减去这个长度,得到的结果除以总的DataGrid列数即为每列可以获得的列数宽度的增量。 double Sub = dgrid.Width - WidthSet - StrLength(strHeadersNoWidth.ToString()) * byteWidth -5; if (Sub<0) { Sub = 0; } double extendWidth = Sub / columnList.Count; try { DataGridCheckBoxColumn checkCol = new DataGridCheckBoxColumn(); //checkCol.Header = new CheckBox(); checkCol.Width = new DataGridLength(5); dgrid.Columns.Add(checkCol); } catch (Exception ex) { throw ex; } //循环添加模板列 foreach (string[] col in columnList) { //如果设置的宽度是0或者没有设置,那么则通过计算获得 if (col[2] == "0" || col[2].Trim() == "") { dgrid.Columns.Add(CreateDataGridTextColumn(col[0], col[1], extendWidth + StrLength(col[1]) * byteWidth)); } else { dgrid.Columns.Add(CreateDataGridTextColumn(col[0], col[1], StrLength(col[1]) * byteWidth)); } } return dgrid; } /// 创建DataGridTextColumn模板列 ///</summary> ///<param name="columnBindName">需要绑定的字段名</param> ///<param name="columnHeaderName">模板列的Header</param> ///<param name="width">模板列的宽度</param> ///<returns></returns> private DataGridTextColumn CreateDataGridTextColumn(string columnBindName, string columnHeaderName, double width) { DataGridTextColumn dgtextColumn = new DataGridTextColumn(); dgtextColumn.Binding = new Binding(columnBindName.Trim()); dgtextColumn.Header = columnHeaderName.Trim(); dgtextColumn.IsReadOnly = false; dgtextColumn.Width = new DataGridLength(width); return dgtextColumn; } /// 字符串长度(按字节算) ///</summary> ///<param name="str">输入一个列名</param> ///<param name="byteWith">设定的一个字节的宽度(假设为6)</param> ///<returns>返回一个列字节数</returns> private static int StrLength(string str) { int len = 0; byte[] b; for (int i = 0; i < str.Length; i++) { b = Encoding.UTF8.GetBytes(str.Substring(i, 1)); if (b.Length > 1) len += 2; else len++; } return len; }