Не удается найти выпадающий список внутри gridview

#c# #asp.net #gridview

#c# #asp.net #gridview

Вопрос:

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

 using (var scTyche = new SqlConnection(ConfigurationManager.ConnectionStrings["KondorConnectionConnectionString"].ConnectionString))
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            var ddl = (DropDownList)row.FindControl("DropDownListFolders1");
            var da = new SqlDataAdapter();
            var dt = new DataTable();
            var ds = new DataSet();

            scTyche.Open();
            var cmdTyche = scTyche.CreateCommand();
            cmdTyche.CommandType = CommandType.StoredProcedure;
            cmdTyche.CommandText = "dbo.spGetFolders";
            cmdTyche.CommandTimeout = 60;
            cmdTyche.Parameters.Add("@nBranchId", SqlDbType.Int).Value = intBranchId;

            da.SelectCommand = cmdTyche;
            da.Fill(dt);
            ds.Tables.Add(dt);

            ddl.DataSource = ds;
            ddl.DataTextField = "strShort";
            ddl.DataValueField = "nId";
            ddl.DataBind();

            cmdTyche.Parameters.Clear();

            scTyche.Dispose();
            scTyche.Close();
        }
    }
 

Мой aspx:

 <asp:UpdatePanel runat="server" ID="update">
    <ContentTemplate>
        <asp:GridView ID="GridView1" runat="server" OnRowEditing="GridView1_RowEditing"
            AllowSorting="True" AutoGenerateColumns="False" SkinID="gridviewGridlinesSkin"
            OnRowUpdated="GridView1_RowUpdated" OnRowUpdating="GridView1_RowUpdating" OnRowDeleted="GridView1_RowDeleted" OnRowDeleting="GridView1_RowDeleting"
            EmptyDataText="No positions found">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                         <asp:Label ID="Label4" runat="server" Text='<%# Eval("strPositionId") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Folder" SortExpression="strFolderName">
                    <EditItemTemplate>
                        <BrummerComp:SortableDropDownList ID="DropDownListFolders1" Width="141px" runat="server"
                                SkinID="BCdropdownlistSkin"/>
                    </EditItemTemplate>
</asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>
 

Комментарии:

1. под каким методом вы запускаете первую часть кода?

Ответ №1:

Если вы хотите привязать выпадающий список вручную из кода, я бы посоветовал вам сделать это либо в GridView.OnDataBinding, GridView.OnDataBoung, GridView.События OnRowDataBound или выпадающий список.OnDataBinding, выпадающий список.События привязки данных OnDataBound.

Возможно, прямо сейчас вы пытаетесь выполнить привязку данных в неправильное время — возможно, до того, как строка будет переведена в режим редактирования?

Также помните, что в режиме редактирования будет находиться только 1 строка — если вы используете GridView.НаRowDataBound вы можете использовать аргументы события (например,Row.RowState == DataControlRowState.Edit ), чтобы определить, обрабатывает ли текущее событие строку в режиме редактирования или нет. Это уменьшит накладные расходы в вашем коде и упростит отладку (потенциально изолируя проблему).

Комментарии:

1. Попытается привязать его к другому событию