Silverlight:如何动态添加DataGrid列
使用EntityFramework进行开发的,写了一个普通的DataTemplate,然后进行绑定:DataGridTemplateColumnitem=newDataG...
使用Entity Framework进行开发的,写了一个普通的DataTemplate,然后进行绑定:
DataGridTemplateColumn item=new DataGridTemplateColumn();
item.Header="Confirm";
item.CellTemplate=(DataTemplate)System.Windows.Markup.XamlReader.Load(CellTemp.ToString());
//item.CellTemplate=Resources("DataTemplateRes");访问xaml资源受限,弃用。
this.vOTEDataGrid.Columns.Insert(0,item);
棘手的是,DataTemplate要绑定一个动态的字段,这个字段就得在相应的Model的类中声明。
一个普通的例子如下:
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public global::System.String GROUPS_ID
{
get
{
return _GROUPS_ID;
}
set
{
OnGROUPS_IDChanging(value);
ReportPropertyChanging("GROUPS_ID");
_GROUPS_ID = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("GROUPS_ID");
OnGROUPS_IDChanged();
}
}
private global::System.String _GROUPS_ID;
partial void OnGROUPS_IDChanging(global::System.String value);
partial void OnGROUPS_IDChanged();
但是如果我在这里声明了动态的Confirm字段,并更新了edmx(必须得保持成员数一致,否则编译不通过),那么程序运行的时候又会从数据库中取出一个本来不存在的Confirm字段并且报错。
如果不使用Entity Framework这里就没什么问题,现在使用了就不知道如何对付它的绑定机制了。
请问这里应该如何配置呢? 展开
DataGridTemplateColumn item=new DataGridTemplateColumn();
item.Header="Confirm";
item.CellTemplate=(DataTemplate)System.Windows.Markup.XamlReader.Load(CellTemp.ToString());
//item.CellTemplate=Resources("DataTemplateRes");访问xaml资源受限,弃用。
this.vOTEDataGrid.Columns.Insert(0,item);
棘手的是,DataTemplate要绑定一个动态的字段,这个字段就得在相应的Model的类中声明。
一个普通的例子如下:
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public global::System.String GROUPS_ID
{
get
{
return _GROUPS_ID;
}
set
{
OnGROUPS_IDChanging(value);
ReportPropertyChanging("GROUPS_ID");
_GROUPS_ID = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("GROUPS_ID");
OnGROUPS_IDChanged();
}
}
private global::System.String _GROUPS_ID;
partial void OnGROUPS_IDChanging(global::System.String value);
partial void OnGROUPS_IDChanged();
但是如果我在这里声明了动态的Confirm字段,并更新了edmx(必须得保持成员数一致,否则编译不通过),那么程序运行的时候又会从数据库中取出一个本来不存在的Confirm字段并且报错。
如果不使用Entity Framework这里就没什么问题,现在使用了就不知道如何对付它的绑定机制了。
请问这里应该如何配置呢? 展开
4个回答
展开全部
private void dataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
//忽略瞎竖数据字段
if (e.PropertyName == "做芦USER_ID" || e.PropertyName == "PASSWD") {
e.Cancel = true;
}
//显示Grid标题
if (e.PropertyName == "USER_NAME")
{
e.Column.Header = "用户名称";
}
else if (e.PropertyName == "DEPT")
{
e.Column.Header = "部门";
}
else if (e.PropertyName == "ROLE")
{
e.Column.Header = "角色";
}
else if (e.PropertyName == "INSERT_TIME")
{
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "创建时间";
templateColumn.CellTemplate = (DataTemplate)Resources["dueDateCellTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["dueDateCellEditingTemplate"];
templateColumn.SortMemberPath = "INSERT_TIME";
e.Column = templateColumn;
}
else if (e.PropertyName == "DESCRIPTION"纯神带)
{
e.Column.Header = "描述";
}
}
有什么不懂得,可以随时问我QQ916139743 我最近也在研究silverlight O(∩_∩)O哈哈~
{
//忽略瞎竖数据字段
if (e.PropertyName == "做芦USER_ID" || e.PropertyName == "PASSWD") {
e.Cancel = true;
}
//显示Grid标题
if (e.PropertyName == "USER_NAME")
{
e.Column.Header = "用户名称";
}
else if (e.PropertyName == "DEPT")
{
e.Column.Header = "部门";
}
else if (e.PropertyName == "ROLE")
{
e.Column.Header = "角色";
}
else if (e.PropertyName == "INSERT_TIME")
{
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "创建时间";
templateColumn.CellTemplate = (DataTemplate)Resources["dueDateCellTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["dueDateCellEditingTemplate"];
templateColumn.SortMemberPath = "INSERT_TIME";
e.Column = templateColumn;
}
else if (e.PropertyName == "DESCRIPTION"纯神带)
{
e.Column.Header = "描述";
}
}
有什么不懂得,可以随时问我QQ916139743 我最近也在研究silverlight O(∩_∩)O哈哈~
追问
我也是这样做的呃。现在发现如果只是想暂时添加一列的话,不如用Linq把查询出的Entites和一个动态字段结合成一个匿名类,再绑定到DataGrid上,这样比较方便。待会儿加你哈。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实这不是silverlight的问题!
Entity Framework 是可以添加计算列的,就是不映射拆型塌到数据库中的列。
例如有订单order ,其中有 单价旅圆price 数量quantity
要求要显示总价total ,那租兆么就可以添加一个计算列.
添加的具体方式参考entity framework的官方CHM文档。
提示:entity都是部分类,可以直接扩展,不需要继承!
Entity Framework 是可以添加计算列的,就是不映射拆型塌到数据库中的列。
例如有订单order ,其中有 单价旅圆price 数量quantity
要求要显示总价total ,那租兆么就可以添加一个计算列.
添加的具体方式参考entity framework的官方CHM文档。
提示:entity都是部分类,可以直接扩展,不需要继承!
追问
愿闻其详,多谢哈。
另外我想在DataTemplate中加一个Button,并在它动态生成时触发一个Click事件,但是运行时程序报错说不允许设置事件,这里只能用Command吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Model不变, 自己 另外写一个类,继承自 该实体,皮没 里面加上 Confirm属性 ,然后用这个类去 做数据源吵握伏升携不就行了
追问
我在web工程中继承了Model新建了一个类DG,并且在对应的Silverlight工程中添加了对web工程的引用,结果出现了循环依赖,请问怎么解决呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询