Silverlight中使用Grid创建自定义的Table表格
来源:互联网 发布:怎么修改网络游戏数据 编辑:程序博客网 时间:2024/06/14 04:04
在Silverlight没有像HTML中的table标签,如果我们想创建一个类似表格的界面或者说想创建一个类似Excel表格,那该如何创建呢,对于一般的可以使用DataGrid控件实现表格的显示,但是如果出现跨行跨列需要合并的表格,那DataGrid就无法实现了。接下来,我就介绍,如何使用Grid控件实现这样的功能。
首先,对于Gird布局控件,我们知道它有行和列的属性,以及可以在每行每列的单元格中放入控件。首先我们需要知道我们创建的表格有多少行或多少列,然后我们在动态创建行和列。
/// <summary> /// 创建Grid,实现表格的主体 /// </summary> protected void CreateGrid(int rows,int columns) { grid = new Grid() { Background = null, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(10, 0, 10, 0) }; for (int i = 0; i < rows; i++) { RowDefinition row = CreateRow(); grid.RowDefinitions.Add(row); } for (int i = 0; i < columns; i++) { ColumnDefinition column = CreateColumn(); grid.ColumnDefinitions.Add(column); } }
自定义创建行和列的方法:CreateRow()和CreateColumn():
/// <summary> /// 创建表格的一行 /// </summary> /// <returns>返回Grid的一行</returns> private RowDefinition CreateRow() { RowDefinition row = new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) }; return row; } /// <summary> /// 创建表格的一列 /// </summary> /// <returns>返回Grid的一列</returns> private ColumnDefinition CreateColumn() { ColumnDefinition column = new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }; return column; }
上面的代码,实现了一个表格的框架的创建,没有边框没有内容,接下来我们创建它的表头以及边框:
protected virtual void CreateHeader(List<string> headList) { for (int i = 0; i < subHeadList.Count; i++) { TextBlock block = CreateTextBlock(headList[i]); Border border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 1, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, 0); border.SetValue(Grid.ColumnProperty, i); grid.Children.Add(border); } }
创建Border是为了让单元格有边框,上面创建的Border的宽度为1Px,创建完后,你会发现最外层的边框宽度会细一些,中间内容的边框会粗一些,这是因为中间的部分是两个Border的宽度,如果要追求完美,你可以将表格最外层单元格的Border的宽度逐一设置一下。
创建TextBlock的方法,创建TextBlock主要是用来显示表格里面的内容:
/// <summary> /// 创建一个TextBlock控件 /// </summary> /// <param name="text">控件的Text</param> /// <returns></returns> protected TextBlock CreateTextBlock(string text) { TextBlock block = new TextBlock() { Text = text, FontSize = 12, Foreground = new SolidColorBrush(Colors.Black), Margin = new Thickness(0, 5, 0, 5), TextWrapping = TextWrapping.Wrap, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }; return block; }
颜色转换的方法ConvertColor():
/// <summary> /// 将ARGB颜色转化成系统的颜色 /// </summary> /// <param name="color">ARGB色彩的字符串</param> /// <returns></returns> protected SolidColorBrush ConvertColor(string color) { SolidColorBrush brush; try { byte a, r, g, b; a = r = g = b = 255; r = Convert.ToByte(color.Substring(0, 2), 16); g = Convert.ToByte(color.Substring(2, 2), 16); b = Convert.ToByte(color.Substring(4, 2), 16); brush = new SolidColorBrush(Color.FromArgb(a, b, g, r)); return brush; } catch { return new SolidColorBrush(Colors.Black); } }
以上就完成了表格的表头的创建,下面介绍一下有关表头需要合并的操作:
/// <summary> /// 创建表格的表头 /// </summary> protected virtual void CreateHeaderOne() { TextBlock block; block=CreateTextBlock(headList[0]); Border border =new Border(){ Background=new SolidColorBrush(Colors.Transparent),BorderThickness=new Thickness(2,2,1,1) ,BorderBrush = ConvertColor("FFC9CACA")}; border.Child = block; border.SetValue(Grid.RowProperty,0); border.SetValue(Grid.ColumnProperty, 0); grid.Children.Add(border); block = CreateTextBlock(headList[1]); border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 2, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, 0); border.SetValue(Grid.ColumnProperty, 1); border.SetValue(Grid.ColumnSpanProperty, 2);//合并两列 grid.Children.Add(border); block = CreateTextBlock(headList[2]); border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 2, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, 0); border.SetValue(Grid.ColumnProperty, 3); border.SetValue(Grid.RowSpanProperty, 2);//合并两行 grid.Children.Add(border); }
表格内容的填充:
/// <summary> /// 将数据绑定到表格里 /// </summary> protected virtual void BindingContent() { int index = 1; foreach (var data in dataSource) { BindingOneColumn(index, data); index++; } } /// <summary> /// 绑定一行数据 /// </summary> private void BindingOneColumn(int index,Model data) { TextBlock block; block=CreateTextBlock(data.ID.ToString()); Border border =new Border(){ Background=new SolidColorBrush(Colors.Transparent),BorderThickness=new Thickness(1,1,1,1) ,BorderBrush = ConvertColor("FFC9CACA")}; border.Child = block; border.SetValue(Grid.RowProperty,index); border.SetValue(Grid.ColumnProperty, 0); grid.Children.Add(border); string text = ConverterToString(data.Name); block = CreateTextBlock(text); border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 1, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, index); border.SetValue(Grid.ColumnProperty, 1); grid.Children.Add(border); text = ConverterToString(data.Sex); block = CreateTextBlock(text); border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 1, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, index); border.SetValue(Grid.ColumnProperty, 2); grid.Children.Add(border); text = ConverterToString(data.Age); block = CreateTextBlock(text); border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 1, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, index); border.SetValue(Grid.ColumnProperty, 3); grid.Children.Add(border); text = ConverterToString(data.Address); block = CreateTextBlock(text); border = new Border() { Background = new SolidColorBrush(Colors.Transparent), BorderThickness = new Thickness(1, 1, 1, 1), BorderBrush = ConvertColor("FFC9CACA") }; border.Child = block; border.SetValue(Grid.RowProperty, index); border.SetValue(Grid.ColumnProperty, 4); grid.Children.Add(border); }
以上代码实现了,将我们的数据集合循环添加到Gird的每一行,每一列中去。其中的dataSource是我们的数据集合,它是我们自定义类型Model的集合。
以上就完成了通过Grid控件实现Table的创建,效果图,如下所示:
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- Silverlight中使用Grid创建自定义的Table表格
- Silverlight中创建一个表格的方法
- Silverlight Grid表格
- HTML中table表格的常用使用
- Markdown使用table标签创建表格的问题
- asp.net中创建table表格
- EXCEL表格中直接使用vb6创建的dll中的自定义函数
- silverlight 自定义表格
- Silverlight中使用自定义服务
- bootstrap的table表格使用
- EXTJS表格控件Grid的使用
- 创建表格(Table)
- Silverlight中Grid.RowDefinitions和Grid.Row
- 在wince中使用C++语言创建Silverlight的VisualState
- 在WINCE中使用C++语言创建SILVERLIGHT的VISUALSTATE
- Silverlight 创建自定义外观的按钮
- jsp页面中table页或者ext grid表格数据导出Excel思路
- HTML 中表格table 的相关知识
- 重置mysql root 密码
- ConvertUtils 字符串和各种类型数据间进行转换
- 虚拟网络链接不上
- (2)Cocos2d-x在windows平台下的环境搭建
- Excel地址转换
- Silverlight中使用Grid创建自定义的Table表格
- Study notes for Expectation Maximum Algorithm
- word文档中插入特殊字符
- ASP.NET MVC自定义异常捕捉及处理
- jcifs
- C语言经典例题100道 第8题
- linux 安装tree
- Csharp:Windowsform using CheckedListBox Datasource
- JCIFS NTLM HTTPAuthenticationJCIFS使用NTLMHTTP认证