Telerik Radgrid GridViewComboBox列的行为不符合预期

时间:2019-01-13 21:08:46

标签: winforms telerik radgridview

我必须实现一个简单的RadGridview,该视图可以显示客户的在场状态,并且如果该人无法参加会议,则可以委派其他礼物之一。除了下拉菜单的行为不正确之外,几乎所有事情都按预期进行。

我已经创建了一个演示项目,您可以从here

对于看不到源代码的人,这里是代码

  public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
    public  ObservableCollection<Item> Items { get; set; }
    public RadForm1()
    {
        InitializeComponent();
        this.Load += RadForm1_Load;

        radGridView1.CellEditorInitialized += RadGridView1_CellEditorInitialized;
    }

    private void RadGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
    {
        if (e.Column.Name == "DelegationId")
        {
            if (!(e.Column is GridViewComboBoxColumn comboBoxColumn)) return;

            if (!(radGridView1.DataSource is IEnumerable<Item> items) ||
                !(e.Row.DataBoundItem is Item currentItem)) return;

            var avaiableItems = items.Where(x => x.Id != currentItem.Id && x.Present).ToList();

            avaiableItems.Insert(0, null);
            comboBoxColumn.DataSource = avaiableItems;
        }
    }

    private void RadForm1_Load(object sender, EventArgs e)
    {
        Items  = new ObservableCollection<Item>();

        for (int i = 0; i < 10; i++)
        {
            Items.Add( new Item{ Id = i, Name = $"Man_{i}"});
        }

        radGridView1.DataSource = Items;
    }
}

public class Item
{
    public  int Id { get; set; }
    public string Name { get; set; }

    public  bool Present { get; set; }

    public int? DelegationId{ get; set; }
}

我面临的第一个问题是,当我将“ Man_1”设置为存在时,然后使用Tab键并编辑“ Man_2”的代表团,我有一个空的下拉菜单,而我原本希望看到“ Man_1”

enter image description here

如果在对“ Man_2”进行操作后对“ Man_3”进行操作,则会在下拉菜单中显示“ Man_1”

这很奇怪,但是以后发生的事情仍然更糟。

现在我处于这种情况

enter image description here

到现在为止,一切似乎都还好。如果我只单击第一行,则在组合框列(“委派”) 我有

enter image description here(因此该值似乎已被删除)

现在,如果我单击与第一个单元格不同的单元格(始终是“委派”),则会显示值

enter image description here

我在做什么错? 谢谢

0 个答案:

没有答案