【发布时间】:2017-08-14 16:47:42
【问题描述】:
我目前正在使用 Telerik 的 RadGridView 来显示来自数据库的数据。我想要的数据确实会加载到 gridview 中,并且我还添加了三个额外的列,供用户输入其他信息。
我遇到的问题是,当您在其中一个空单元格中输入信息并单击行/列之外时,我输入的信息就会消失。我已经搜索了与此相关的每个论坛,我认为我使用gridView.Items.CommitEdit 的代码是正确的,但是我输入到空单元格中的信息仍然消失了。这是创建额外列的代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//Loads queries from each of the designated data tables in BSI_Test
var customerQuery =
(from customer in testEntity.Customers
join job in testEntity.Jobs
on customer.CID equals job.CID
join claim in testEntity.Claims
on job.JID equals claim.JID
select new
{
Customer_Name = customer.CName,
Customer_Id = customer.CID,
Job_Id = job.JID,
Claim_Id = claim.CLAIMID,
DID = DeductId,
Check_No = CheckNo,
Check_Date = CheckDate
})
.OrderBy(c => c.Customer_Name);
//Populates the Telerik data grid with data.
gridView.ItemsSource = customerQuery.ToList();
GridViewDataColumn deductId = new GridViewDataColumn();
deductId.UniqueName = "DeductId";
deductId.Header = "DID";
deductId.DataMemberBinding = new Binding("DeductId");
gridView.Columns.Add(deductId);
GridViewDataColumn checkNo = new GridViewDataColumn();
checkNo.UniqueName = "CheckNo";
checkNo.Header = "Check No";
checkNo.DataMemberBinding = new Binding("CheckNo");
gridView.Columns.Add(checkNo);
GridViewDataColumn checkDate = new GridViewDataColumn();
checkDate.UniqueName = "CheckDate";
checkDate.Header = "Check Date";
checkDate.DataMemberBinding = new Binding("CheckDate");
gridView.Columns.Add(checkDate);
}
这是我的gridView_CellEditEnded 事件,它尝试提交对列所做的任何编辑。注意:我确实使用断点测试了这个事件,当我在单元格中输入信息并单击它时,它确实会一直通过 if 语句。但是我输入的数据还是消失了,所以CommitEdit好像不能正常工作。
bool handle = true;
private void gridView_CellEditEnded(object sender, GridViewCellEditEndedEventArgs e)
{
if (e.EditAction == GridViewEditAction.Commit && handle)
{
handle = false;
gridView.Items.EditItem(this.gridView.CurrentItem);
gridView.Items.CommitEdit();
handle = true;
}
}
如果有人能够帮助我解决这个问题,将不胜感激。老实说,我对我的代码有什么问题感到非常困惑。
编辑:
我已经更新了Window_Loaded 事件的代码,以显示将信息从数据库查询到数据网格的 linq 查询。然后将ItemsSource 作为列表设置为此查询。下面是我的 MainWindow() 方法之前的所有内容,我在其中设置了 DeductId、CheckNo 和 CheckDate 的属性。
public string DeductId { get; set; }
public int CheckNo { get; set; }
public string CheckDate { get; set; }
public MainWindow()
{
InitializeComponent();
}
编辑: 现在我在 linq 查询中添加了 DeductId、CheckNo 和 CheckDate 属性。
编辑: 这是 DataProperties 类:
public partial class DataProperties
{
public string CName { get; set; }
public int CID { get; set; }
public int JID { get; set; }
public int CLAIMID { get; set; }
public string DeductId { get; set; }
public string CheckNo { get; set; }
public string CheckDate { get; set; }
}
【问题讨论】:
-
鉴于您尝试绑定的模型实际上具有名为“DeductId”、“CheckNo”和“CheckDate”的属性,到目前为止您显示的代码工作正常。您能否展示将数据源绑定到网格的代码部分?换句话说,如何绑定或分配数据网格的
ItemsSource?您是否碰巧将查询直接绑定到数据网格? -
是的,我将 linq 查询绑定到
ItemsSource直接到网格。该查询连接了我正在使用的数据库中的三个不同的表,并显示了所需的信息。一旦我可以访问应用程序并发布绑定ItemsSource的代码,我明天将编辑这篇文章。但是对于“DeductID”、“CheckNo”和“CheckDate”等其他属性,我将这些属性单独编程,因为它们不是数据库的一部分,也会发布这些属性。 -
好的,我已经编辑了我的帖子以显示作为 ItemsSource 的 linq 查询,并发布了我的代码,我在其中设置了 DeductId、CheckNo 和 CheckDate 的属性。
标签: c# wpf gridview telerik radgridview