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;
}

 显示效果如下  列为按钮  自己控制事件

自一次写博客  欢迎拍砖

posted @ 2011-11-24 15:44  luosm  阅读(2490)  评论(0编辑  收藏  举报