Невозможно редактировать ячейки в RadGridView Telerik WPF

Я в настоящее время использую Telerik's RadGridView для отображения данных из базы данных. Данные, которые мне нужны, загружаются в сетку, и я также добавил три дополнительных столбца, которые пользователи могут вводить в дополнительную информацию.

У меня проблема в том, что когда вы вводите информацию в одну из пустых ячеек и щелкаете из строки / столбца, информация, которую я ввел, исчезает. Я просмотрел все форумы, связанные с этим, и я думаю, что у меня есть правильный код, использующий 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; }
}

1 ответ

Решение

Вы должны установить DataMemberBinding свойство каждого столбца в Binding объект:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    GridViewDataColumn deductId = new GridViewDataColumn();
    deductId.UniqueName = "DeductId";
    deductId.Header = "DID";
    deductId.DataMemberBinding = new System.Windows.Data.Binding("DeductId");
    gridView.Columns.Add(deductId);

    GridViewDataColumn checkNo = new GridViewDataColumn();
    checkNo.UniqueName = "CheckNo";
    checkNo.Header = "Check No";
    deductId.DataMemberBinding = new System.Windows.Data.Binding("CheckNo");
    gridView.Columns.Add(checkNo);

    GridViewDataColumn checkDate = new GridViewDataColumn();
    checkDate.UniqueName = "CheckDate";
    checkDate.Header = "Check Date";
    deductId.DataMemberBinding = new System.Windows.Data.Binding("CheckDate");
    gridView.Columns.Add(checkDate);
}

Вы также должны убедиться, что тип T из IEnumerable<T> что вы установили в качестве ItemsSource для RadGridView на самом деле содержит DeductId, CheckNo а также CheckDate свойства и что каждый из них имеет открытый сеттер.

Привязка к коллекции объектов анонимного типа не будет работать. Вам необходимо создать класс, который содержит все свойства (Customer_Name, Customer_Id, Job_Id, Claim_Id, DeductId, CheckNo и CheckDate) и имеет общедоступные установщики для тех, которые вы хотите иметь возможность редактировать в RadGridView:

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 YourClass //<--
            {
                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);
Другие вопросы по тегам