В настоящее время я использую 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;
}
}
Если кто-то может помочь мне с этим, это было бы очень признательно. Честно говоря, я очень смущен тем, что не так с моим кодом.
EDIT: я обновил код для события 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();
}
EDIT: теперь я добавил свойства DeductId, CheckNo и CheckDate в запрос linq.
EDIT: Вот класс 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; }
}
ItemsSource
сетки данных? Вы случайно не привязываете запрос непосредственно к сетке данных? - person Vincent   schedule 15.08.2017ItemsSource
непосредственно к сетке. Запрос объединяет три разные таблицы из используемой мной базы данных и отображает необходимую информацию. Я отредактирую этот пост завтра, когда у меня будет доступ к приложению, и опубликую код, связывающийItemsSource
. Но для других свойств, таких как DeductID, CheckNo и CheckDate, я запрограммировал эти свойства отдельно, поскольку они не являются частью базы данных и также будут публиковать их. - person GamerTalks   schedule 15.08.2017