dataind gridview edititemtemplate выпадающий список с оператором sql

У меня есть gridview со следующим кодом:

<asp:TemplateField HeaderText="Column1">
    <EditItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Column1") %>'></asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:DropDownList ID="DropDownList1" runat="server" Width="125px">
    </asp:DropDownList>
    </ItemTemplate>
</asp:TemplateField>

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

select Column1 from Table1

я сделал бы это через код позади? любая информация ценится? Также на основе выбора, который пользователь делает с помощью этого выпадающего списка, я хочу заполнить следующий столбец (column2) соответствующими данными... Нужна помощь с этим тоже...

Я не знаком с полями шаблона, я могу работать с привязкой gridview в коде позади и через HTML, но template fields похож на другой язык... Я ценю помощь!!

1 ответ

Ответ на ваш вопрос состоит из нескольких частей, и я делаю несколько предположений (вы используете Visual Studio в качестве IDE, вы можете использовать VB в качестве языка кода):

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

Вы можете сделать это либо через код, либо через графический интерфейс Visual Studio. Хотя вы можете использовать ограниченное поле для выпадающего списка, поле шаблона в конечном итоге дает вам большую гибкость. Я бы прочитал в поле шаблона ( здесь), так как это будет ваш друг, использующий Gridview для чего угодно, кроме отображения основных данных. Используя графический интерфейс пользователя, при выборе выпадающего списка вы увидите маленькую стрелку в верхнем правом углу, которая позволит вам создать подключение к данным и источник данных для привязки к вашему выпадающему списку.

Также на основе выбора, который пользователь делает с помощью этого выпадающего списка, я хочу заполнить следующий столбец (column2) соответствующими данными

Это немного сложнее, так как вам нужно будет запустить PostBack (используя AutoPostBack) в раскрывающемся списке, обработать событие SelectedIndexChanged в раскрывающемся списке, найти элемент управления для обновления во втором столбце и обновить этот элемент управления на основе выбранного индекса /item/ значение из вашего выпадающего списка. Есть несколько способов сделать это, но вот самый быстрый, который я нашел (используя winpforms asp.net). Я использую базу данных SQL Adventureworks, заполняю раскрывающийся список в поле шаблона в столбце 1 с employeeID и использую выбранный employeeID для заполнения метки в столбце 2 с managerID этого employeeID.

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
    EnableModelValidation="True" AutoGenerateColumns="False" 
    DataKeyNames="EmployeeID">
    <Columns>
        <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" 
            InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" />
        <asp:TemplateField>
            <ItemTemplate>
                Select EmployeeID
                <asp:DropDownList ID="ddEmpID" runat="server" OnSelectedIndexChanged="ddEmpID_SelectedIndexChanged" 
                    DataSourceID="SqlDataSource1" DataTextField="EmployeeID" 
                    DataValueField="EmployeeID" AutoPostBack="True">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="labManagerID" runat="server" Text="ManagerID"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="Data Source=MyServer\Instance;Initial Catalog=AdventureWorks;Integrated Security=True" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT TOP(10) EmployeeID, ManagerID FROM HumanResources.Employee">
</asp:SqlDataSource>

И событие SelectedIndexChanged из выделенного кода:

Protected Sub ddEmpID_SelectedIndexChanged(sender As Object, e As EventArgs)
    Dim myDDList As DropDownList = CType(sender, DropDownList)
    Dim gvRow As GridViewRow = CType(myDDList.NamingContainer, GridViewRow)
    Dim myLabel As Label = CType(gvRow.FindControl("labManagerID"), Label)

    ' Create your sql query here to populate a data object and assign values throughout your row
        Dim myConnection As SqlConnection = New SqlConnection("Data Source=MyServer\Instance;Initial Catalog=AdventureWorks;Integrated Security=True")
        Dim myCmd As SqlCommand = New SqlCommand("Select ManagerID FROM HumanResources.Employee WHERE EmployeeID='" + myDDList.SelectedValue + "'", myConnection)

        If myConnection.State = ConnectionState.Closed Then myConnection.Open()
        myLabel.Text = myCmd.ExecuteScalar
        If myConnection.State = ConnectionState.Open Then myConnection.Close()

End Sub

А поскольку работа с Gridview иногда является упражнением в самобичевании, я бы посоветовал иметь под рукой несколько хороших пошаговых руководств:

-J

Другие вопросы по тегам