Нужно выбрать строку сетки дважды для выпадающего списка, чтобы правильно выбрать - PullRequest
0 голосов
/ 13 октября 2010

Я использую приведенный ниже код для извлечения данных из вида сетки и заполнения их в текстовые поля для дней и двух выпадающих списков для проекта и категории.

Для некоторых строк в виде сетки все, кроме категории ddlправильно заполняетЕсли я щелкаю строку во второй раз, категория ddl отображает правильную категорию.

Может кто-нибудь сказать мне, почему я должен щелкнуть дважды для некоторых строк?И как мне это исправить?

Спасибо

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    //// Get the currently selected row using the SelectedRow property.
    GridViewRow row = GridView1.SelectedRow;

    txtSunday.Text = (row.Cells[6].Controls[0] as DataBoundLiteralControl).Text.Trim();
    txtMonday.Text = (row.Cells[7].Controls[0] as DataBoundLiteralControl).Text.Trim();
    txtTuesday.Text = (row.Cells[8].Controls[0] as DataBoundLiteralControl).Text.Trim();
    txtWednesday.Text = (row.Cells[9].Controls[0] as DataBoundLiteralControl).Text.Trim();
    txtThursday.Text = (row.Cells[10].Controls[0] as DataBoundLiteralControl).Text.Trim();
    txtFriday.Text = (row.Cells[11].Controls[0] as DataBoundLiteralControl).Text.Trim();
    txtSaturday.Text = (row.Cells[12].Controls[0] as DataBoundLiteralControl).Text.Trim();

    // Set ProjectList ddl to Project in selected row
    if (ProjectList.Items.FindByText(row.Cells[2].Text.Trim()) != null)
    {
        ProjectList.ClearSelection();
        ProjectList.Items.FindByText(row.Cells[2].Text.Trim()).Selected = true;
    }


///    This is the ddl that doesn't always populate correctly unless you click the 
///   gridview row selector twice

    // Set CategoryList ddl to Category in selected row
    if (CategoryList.Items.FindByText(row.Cells[4].Text.Trim()) != null)
    {
        CategoryList.ClearSelection();
        CategoryList.Items.FindByText(row.Cells[4].Text.Trim()).Selected = true;
    }
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2010

Я думаю, я понял это. Мне нужно было перепривязать категорию ddl после настройки проекта

    // Set ProjectList ddl to Project in selected row
    if (ProjectList.Items.FindByText(row.Cells[2].Text.Trim()) != null)
    {
        ProjectList.ClearSelection();
        ProjectList.Items.FindByText(row.Cells[2].Text.Trim()).Selected = true;
    }

    // Set CategoryList ddl to Category in selected row


// I added this line and it seems to work now
        CategoryList.DataBind();

    if (CategoryList.Items.FindByText(row.Cells[4].Text.Trim()) != null)
    {
        CategoryList.ClearSelection();
        CategoryList.Items.FindByText(row.Cells[4].Text.Trim()).Selected = true;
    }
0 голосов
/ 13 октября 2010

Я не уверен, почему для правильного выбора выпадающего списка требуется два щелчка, но это может быть связано с проблемами упорядочения событий обратной передачи / ViewState.Одна вещь, которую вы можете рассмотреть, - это использование данных, к которым вы привязываете сетку, а не текст элементов управления в сетке.IOW, при условии, что вы привязываетесь к коллекции объектов, подобной этой:

public class ProjectSchedule
{
    public string Project {get;set;}
    public int CategoryId {get;set;}
    public string Category {get;set;}
    public string Sunday {get;set;}
    public string Monday {get;set;}
    public string Tuesday {get;set;}
    public string Wednesday {get;set;}
    public string Thursday {get;set;}
    public string Friday {get;set;}
    public string Saturday {get;set;}
}

Затем в обработчике событий SelectedIndexChanged получите ваши данные следующим образом:

GridViewRow row = GridView1.SelectedRow;
ProjectSchedule ps = row.DataItem as ProjectSchedule;
if (ps != null) 
{
    txtSunday.Text = ps.Sunday;
    // the rest of the days...
    ListItem categoryItem = CategoryList.Items.FindByText(ps.Category);
    if (categoryItem != null)
    {
        CategoryList.ClearSelection();
        categoryItem.Selected = true;
    }
    // same with ProjectList
}

Предполагая,ваши элементы управления будут попадать в один и тот же столбец каждый раз, когда ограничивает ремонтопригодность.Например, скажем, что требования изменяются, чтобы столбцы с днями были перед столбцом Проект.Это очень много индексов, которые нужно изменить.

Было бы еще лучше, если бы у вас были какие-то категории и еще что-то проиндексировано (например, свойство CategoryId, которое я ввел контрабандой в объект ProjectSchedule выше), тогда выможет искать элемент по значению, а не по тексту, устраняя еще одну точку отказа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...