我的数据库名称中包含用户字段:
Id
FirstName
LastName
LoginName
现在,我想使用ASPxGridView
在LinqServerModeDataSource
中提供此表格。
我做的是:
<dxdtlnq:LinqServerModeDataSource ID="LinqServerModeDataSource1" runat="server" OnSelecting="LinqServerModeDataSource1_OnSelecting"
ContextTypeName="MyContext" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" TableName="Users" >
</dxdtlnq:LinqServerModeDataSource>
protected void LinqServerModeDataSource1_OnSelecting(object sender, LinqServerModeDataSourceSelectEventArgs e)
{
MyContext context = new MyContext();
var qry = from s in context.Users select s;
e.QueryableSource = qry;
}
这对我的ASPxGridView非常有用。我可以显示数据,插入和删除,但现在我想添加UserName
+ FirstName
的其他列LastName
。
所以我做了类似的事情:
为我的ASPxGridView添加了适当的列(FieldName =“UserName”) 并修改了OnSelecting处理程序:
protected void LinqServerModeDataSource1_OnSelecting(object sender, LinqServerModeDataSourceSelectEventArgs e) {
KozuModelDataContext context = new MyContext();
var qry = (from s in context.Substitutions
select new
{
Id = s.Id,
FirstName = s.FirstName,
LastName = s.LastName,
LoginName = s.LoginName,
UserName = s.FirstName + " " + s.LastName,
}).AsQueryable();
e.KeyExpression = "Id";
e.QueryableSource = qry;
}
现在,当我想插入或编辑数据字段时,网格中的数据显示为buyt,文本框在插入表单时没有响应,我无法在任何文本中输入。
是否有以这种方式插入和编辑数据的解决方案?
感谢您的帮助
答案 0 :(得分:3)
我尝试重现此问题并看到此行为。为了能够使用这种方法编辑数据,我建议您执行以下操作:
1)处理ASPxGridView.CellEditorIntitialize事件并将e.Editor.ReadOnly属性设置为false。这将允许最终用户修改EditForm编辑器中的数据;
2)处理ASPxGridView.RowUpdating(RowInserting)事件并手动更新数据。此外,您应该将e.Cancel参数设置为true(以防止网格自身更新数据),并调用GridView的CancelEdit方法来关闭EditForm。
我还应该提一下,不需要从DB获取UserName的数据。这可以使用ASPxGridView的CustomColumnDisplayText事件处理程序完成:
protected void ASPxGridView1_CustomColumnDisplayText(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDisplayTextEventArgs e) {
if(e.Column.FieldName == "") {
object[] values = ASPxGridView1.GetRowValues(e.VisibleRowIndex, new string[] { "FirstName", "LastName" }) as object[];
e.DisplayText = values[0].ToString() + " " + values[1].ToString();
}
}
如果此方法适用于您,则可以避免使用Selecting事件,从而设置LinqServerModeDataSource的TableName。这将允许您提供数据编辑功能,而不是使用我上面解释的方法。