Создайте выпадающий список из вида сетки - PullRequest
0 голосов
/ 16 августа 2011

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

<ItemTemplate>
   <asp:DropDownList runat="server" 
           ID="ddlCalculateGrid" 
           Style="border: none; border-width: 0px; width: 90%"
           OnSelectedIndexChanged="ddlCalculateGrid_OnSelectedIndexChanged"
           AutoPostBack="true">
   </asp:DropDownList>
   <asp:HiddenField runat="server" 
           ID="hdnCalculate" 
           Value='<%# Eval("Calculate") %>' />
</ItemTemplate>

и вот код конца.

        DropDownList tempddl;
        tempddl = (DropDownList)grvbillDetail.FindControl("ddlCalculateGrid");
        tempddl.DataSource = rcta.GetDataByTrueValue();
        tempddl.DataBind();

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

Ваш выпадающий список находится в шаблоне элемента. Это означает, что ваше сеточное представление может содержать несколько раскрывающихся списков (по одному в каждой строке) или вообще не содержать их, если сеточное представление привязано к источнику без строк.

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

protected void Page_Load(object sender, EventArgs e)
{
    grvbillDetail.RowDataBound += grvbillDetail_RowDataBound;
}

void grvbillDetail_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow)
        return;
    var ddl = e.Row.FindControl("ddlCalculateGrid") as DropDownList;
    if (ddl != null)
    {
        ddl.DataSource = rcta.GetDataByTrueValue();
        ddl.DataBind();
    }
}
}
1 голос
/ 16 августа 2011

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

foreach (GridViewRow tt in GridView1.Rows)
        {
            if (tt.RowType == DataControlRowType.DataRow)
            {                    
              tt.FindControl("ddlCalculateGrid");
            }
        }
1 голос
/ 16 августа 2011

Поскольку это шаблон элемента, проще всего использовать обработчик в самом раскрывающемся списке:

<asp:DropDownList runat="server" ID="ddlCalculateGrid" 
    Style="border: none; border-width: 0px;width: 90%"
    OnSelectedIndexChanged="ddlCalculateGrid_OnSelectedIndexChanged"
    OnLoad="ddlCalculateGrid_OnLoad"
    AutoPostBack="true">

, а затем в методе ddlCalculateGrid_OnLoad:

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