Member 14479161 Ответов: 1

Как получить доступ к dropdownlistcontrol в grideview?


Привет
Я пытаюсь получить доступ к выпадающему списку внутри grideview, но я всегда получаю нулевой exeption

1-файл aspx
<pre><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Employee_Mangment.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>   
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" OnRowDeleted="GridView1_RowDeleted" DataKeyNames="ID" OnRowUpdated="GridView1_RowUpdated" OnRowDataBound="GridView1_RowDataBound">
                <Columns>
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                    <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" ReadOnly="true" />
                    <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                    <asp:TemplateField HeaderText="Education" SortExpression="Education">
                        <EditItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="ObjectDataSource2" DataTextField="EducationType" DataValueField="EducationType" SelectedValue='<%# Bind("Education") %>'>
                            </asp:DropDownList>
                            <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetEducations" TypeName="Employee_Mangment.Data.EducationDataAccess"></asp:ObjectDataSource>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("Education") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <asp:Label ID="Label1" runat="server" Text="" Font-Bold="true"></asp:Label>
            <asp:Label ID="Label2" runat="server" Text="" Font-Bold="true"></asp:Label>
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetEmployees" TypeName="Employee_Mangment.Data.EmployeeDataAccess" UpdateMethod="UpdateEmployee" ConflictDetection="CompareAllValues" OldValuesParameterFormatString="Original_{0}" DeleteMethod="DeleteEmployee" OnDeleted="ObjectDataSource1_Deleted" OnUpdated="ObjectDataSource1_Updated">
                <DeleteParameters>
                    <asp:Parameter Name="Original_ID" Type="Int32" />
                    <asp:Parameter Name="Original_Name" Type="String" />
                    <asp:Parameter Name="Original_Education" Type="String" />
                </DeleteParameters>
                <UpdateParameters>
                    <asp:Parameter Name="Original_ID" Type="Int32" />
                    <asp:Parameter Name="Original_Name" Type="String" />
                    <asp:Parameter Name="Original_Education" Type="String" />
                    <asp:Parameter Name="Name" Type="String" />
                    <asp:Parameter Name="Education" Type="String" />
                </UpdateParameters>
            </asp:ObjectDataSource>

        </div> 
    </form>
</body>
</html>


2-Код для доступа является
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if(e.Row.RowType == DataControlRowType.DataRow)
    {
          DropDownList drop =
             (DropDownList)GridView1.Rows[1].FindControl("DropDownList1");


    }
}


Что я уже пробовал:

я попытался получить к нему доступ в интернете.
GridView1_RowDataBound()
с помощью этого метода ряд proparty быт вам нуль тоже

Richard MacCutchan

Используйте отладчик, чтобы увидеть, что находится внутри GridView1.Rows[1] возможно, что GridView не был инициализирован.

Member 14479161

становится нулем тоже

Richard MacCutchan

Что это значит?

Member 14479161

null exeption для значения, которое я прикрепил к нему GridView1.Rows[1]

Richard MacCutchan

Мне все еще нет смысла пытаться понять, что это значит. Сделайте то, что я предложил вчера, и используйте свой отладчик, чтобы узнать, какой фактический элемент равен нулю. Затем работайте в обратном направлении, чтобы выяснить, почему он не был инициализирован.

Maciej Los

Попробуйте это (внутри GridView1_RowDataBound метод):

DropDownList drop = (DropDownList)e.Row.FindControl("DropDownList1");

Дайте мне знать, если это будет полезно.

Member 14479161

становится нулем тоже

1 Ответов

Рейтинг:
2

Richard Deeming

Элемент управления списком находится в EditItemTemplate Поэтому он будет существовать только в том случае, если строка находится в состоянии редактирования.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) != 0)
    {
        DropDownList drop = (DropDownList)e.Row.FindControl("DropDownList1");
        ...
    }
}
GridViewRow.Свойство RowState (System.Web.UI.WebControls) | Microsoft Docs[^]


Maciej Los

Я не уделял ему достаточно внимания...
5ed!