这段时间刚刚接触Developer Express控件就遇到一个很纠结的问题,在绑定由多表查询生成的数据源时,无法获取ASPxGridView的选中项,也就是在我的ASPxGridView列表中有checkbox复选框,后台通过复选框来获取ASPxGridView列表的选中项,但是由于我的数据源是多表查询生成的,所以在我给 ASPxGridView KeyFieldName属性设置了主键时,点击列表中的复选框时,后台无法获取列表的选中项。这类问题如果在ASPxGridView的数据源为单表或是试图时是不会出现的。纠结了很久之后终于弄清楚了,原因是在我进行数据绑定的时候,即使KeyFieldName数据不赋值是程序也不会报错,但是在当我点击复选框时,Developer Express的机制是重新执行绑定数据源方法,当程序再次绑定的时候就会找不到keyFieldName这个属性的值,所以程序会报错,解决方法有两种,
第一种是在SQL语句中返回数据表中的联合主键,把两个主键拼接成一个别名的主键返回,在前台把返回的主键赋值到KeyFieldName上,就可以了。
第二种方法在后台拼接keyFieldName的值,前台随便给KeyFieldName一个值(这里我给的值是CompositeKey),在后台添加事件ASPxGridView的事件
protected void ASPxGdResearchUniversityAdd_CustomUnboundColumnData(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDataEventArgs e)
{
if (e.Column.FieldName == "CompositeKey")
{
string ResearchID = Convert.ToString(e.GetListSourceFieldValue("ResearchID"));
string TutorID = Convert.ToString(e.GetListSourceFieldValue("TutorID"));
e.Value = ResearchID + "-" + TutorID;
}
}
这两种方式都要在ASPxGridView中添加 如下代码
<dx:GridViewDataTextColumn FieldName="CompositeKey" Caption="主键ID" Visible="false">
</dx:GridViewDataTextColumn>