This is a migrated thread and some comments may be shown as answers.

GridViewComboBoxColumn contents not appearing on first time click only

1 Answer 179 Views
GridView
This is a migrated thread and some comments may be shown as answers.
David Simmonds
Top achievements
Rank 1
David Simmonds asked on 18 Jan 2012, 03:38 PM
I have a GridView with a GridViewComboBox column. I create a datasource in the Load handler of the form but do not assign it to the GridViewComboBox yet. The datasource is an IQueryable object and is located in the class accessible to all methods of the class.

private IQueryable<BUILDING> dataBuildings;

The GridViewComboBox datasource gets assigned in the CellEditorInitialized event handler of the gridView.

When the app runs and I click in the cell with the combobox, the contents of the dropdown are empty but the size of the dropdown is as if it were filled. If I click on another cell, same row or another row, and then click back into the combobox cell, the contents are filled as expected.

Why would this be?

1 Answer, 1 is accepted

Sort by
0
Jack
Telerik team
answered on 23 Jan 2012, 11:57 AM
Hi David,

We were not able to reproduce this issue. However, we do not recommend setting the DataSource property every time when starting an edit operation. Instead, you can set the DataSource property to GridViewComboBoxColumn and use filtering to change visible items. Please, consider the code snippet below which demonstrates this scenario:

private void Form1_Load(object sender, EventArgs e)       
{
    radGridView1.CellEditorInitialized += new GridViewCellEventHandler(radGridView_CellEditorInitialized);           
 
    radGridView1.Columns.Add("CategoryName", "Category", "Name");
          
    DataTable products = new DataTable();
    products.Columns.Add("ID", typeof(int));
    products.Columns.Add("ProductID", typeof(int));
    products.Columns.Add("Name", typeof(string));
    products.Rows.Add(1, 1, "Apple");
    products.Rows.Add(2, 1, "Melon");
    products.Rows.Add(3, 1, "Cherry");
    products.Rows.Add(4, 2, "Tomato");
    products.Rows.Add(5, 2, "Cucumber");
    products.Rows.Add(6, 2, "Potato");
 
    GridViewComboBoxColumn comboBoxColumn = new GridViewComboBoxColumn("Product", "Product");
    comboBoxColumn.DisplayMember = "Name";
    comboBoxColumn.ValueMember = "ID";
    comboBoxColumn.DataSource = products;
    comboBoxColumn.Width = 250;
    radGridView1.Columns.Add(comboBoxColumn);
 
    radGridView1.Rows.Add("Fruits", 1);
    radGridView1.Rows.Add("Vegetables", 4);
}
 
private bool PerformFiltering(RadListDataItem item)
{
    DataRowView row = (DataRowView)item.DataBoundItem;
    string category = this.radGridView1.CurrentRow.Cells["CategoryName"].Value.ToString();
    if (category == "Fruits")
    {
        return (int)row["ProductID"] == 1;
    }
    return (int)row["ProductID"] == 2;
}
 
void radGridView_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1)
    {
        if (this.radGridView1.CurrentRow.Cells[0].Value != null)
        {
            RadDropDownListEditor editor = this.radGridView1.ActiveEditor as RadDropDownListEditor;
            if (editor != null)
            {
                RadDropDownListEditorElement editorElement = (RadDropDownListEditorElement)editor.EditorElement;
                editorElement.SelectedValue = null;
                editorElement.Filter = PerformFiltering;
                editorElement.SelectedValue = radGridView1.CurrentCell.Value;
            }
        }
    }
}

I hope this helps. If you continue to experience this issue, please send us a sample project which reproduces it and we will try to find the best option.

Regarding the drop down size, RadDropDownListElement has a default size and it will show its popup even when there are no items.

Should you have any other questions, we will be glad to help.
 
All the best,
Jack
the Telerik team

SP1 of Q3’11 of RadControls for WinForms is available for download (see what's new).

Tags
GridView
Asked by
David Simmonds
Top achievements
Rank 1
Answers by
Jack
Telerik team
Share this question
or