silverlight DataGrid 动态创建列
不光是动态生成的列 列头使用模板 使列为按钮 添加事件(没找到列头点击的事件,如果有园友有方法,还请赐教下)
grid列模板
<DataTemplate x:Key="myColumnTemplate">
<Button Content="{Binding Path=ColumnName}" BorderBrush="Transparent" HorizontalAlignment="Center" Click="Button_Click" Width="{Binding Path=ColumnWidth }"></Button>
</DataTemplate>
自定义列
DataTemplate temp = (DataTemplate)Resources["myColumnTemplate"];
#region 添加三列 可以根据需要 循环添加列
if (page.SelectedColumns.Count == 0)
{
cdrGridView.Columns.Add(myColumn(new ColumnInfo() { ColumnName = "CDR_CI", ColumnWidth = "CDR_CI".Length * 10 }, temp));
cdrGridView.Columns.Add(myColumn(new ColumnInfo() { ColumnName = "ABIS_CHAN_RQD_COUNTER", ColumnWidth = "ABIS_CHAN_RQD_COUNTER".Length * 10 }, temp));
cdrGridView.Columns.Add(myColumn(new ColumnInfo() { ColumnName = "ABIS_DROP_LAST_CI", ColumnWidth = "ABIS_DROP_LAST_CI".Length * 10 }, temp));
}
#endregion
任意模板类型
private DataGridTemplateColumn anyTemp(ColumnInfo columnInfo, DataTemplate temp)
{
DataGridTemplateColumn gridColumn = new DataGridTemplateColumn();
#region headerStyle
Style headerStyle = new Style();
headerStyle.TargetType = typeof(DataGridColumnHeader);
Setter setterContent = new Setter(DataGridColumnHeader.ContentTemplateProperty, temp);
headerStyle.Setters.Add(setterContent);
gridColumn.HeaderStyle = headerStyle;
gridColumn.Header = columnInfo;
#endregion
StringBuilder cellTemplateStr = new StringBuilder();
cellTemplateStr.Append("<DataTemplate xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >");
cellTemplateStr.Append(" <CheckBox Content=\"{Binding Path=" + "CDR_"+columnInfo.ColumnName + "}\"></CheckBox>");
cellTemplateStr.Append("</DataTemplate>");
DataTemplate cellTemplate = (DataTemplate)XamlReader.Load(cellTemplateStr.ToString());//["textTemplate"];
gridColumn.CellEditingTemplate = cellTemplate;
StringBuilder cellTemplateStr2 = new StringBuilder();
cellTemplateStr2.Append("<DataTemplate xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >");
cellTemplateStr2.Append(" <TextBlock Text=\"{Binding Path=" + "CDR_" + columnInfo.ColumnName + "}\"></TextBlock>");
cellTemplateStr2.Append("</DataTemplate>");
DataTemplate celleditTemplate = (DataTemplate)XamlReader.Load(cellTemplateStr2.ToString());
gridColumn.CellTemplate = celleditTemplate;
//gridColumn.CellTemplate=
return gridColumn;
}
自定义模板的列 方法
//自定义模板的列 当前这个方法 只能创建 行信息是text文本的
private DataGridTextColumn myColumn(ColumnInfo columnInfo, DataTemplate temp)
{
DataGridTextColumn gridColumn = new DataGridTextColumn();
Style headerStyle = new Style();
headerStyle.TargetType = typeof(DataGridColumnHeader);
Setter setterContent = new Setter(DataGridColumnHeader.ContentTemplateProperty, temp);
headerStyle.Setters.Add(setterContent);
gridColumn.HeaderStyle = headerStyle;
gridColumn.Header = columnInfo;// new { ColumnName = columnInfo.ColumnName };
Binding bing = new Binding();
bing.Path = new PropertyPath("CDR_"+columnInfo.ColumnName);
gridColumn.Binding = bing;
return gridColumn;
}
显示效果如下 列为按钮 自己控制事件
自一次写博客 欢迎拍砖
作者:
luosm(luosm's Blog on 博客园)
出处:http://www.cnblogs.com/luosm/
本作品由luosm 创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请 给我留言。
出处:http://www.cnblogs.com/luosm/
本作品由luosm 创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请 给我留言。