2014-07-24 5 views
0

Я пробовал тысячу способов сделать эту работу, и я не могу. У меня есть DropDownList, связанный с данными в столбце из базы данных .mdf. У меня также есть GridView под ним, связанный с помощью Query Builder для столбцов из 4 разных таблиц в той же базе данных.Сделать изменение ASP.NET GridView на основе выбора DropDownList

Я знаю, что для этого вам нужно добавить предложение WHERE в строку запроса, которая выглядит примерно так: WHERE ([column] = @column) - И тогда вы должны поместить SelectParameters в код HTML , Но я не знаю, как правильно писать.

Я продолжаю получать ошибки при запуске страницы в браузере. Ошибки типа «Столбец неоднозначный», «Столбец не существует», «Должен объявить скалярную переменную @column» и т. Д. Я думаю, что это может иметь какое-то отношение к тому факту, что три таблицы имеют столбец с именем description и 2 из у них есть псевдонимы.

Вот HTML:

<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="ByCategory.aspx.vb" Inherits="_Default" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
<asp:Label ID="Label2" runat="server" Text="Select a category:"></asp:Label> 
<br /> 
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="description" DataValueField="description"></asp:DropDownList> 
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [description] FROM [category]"></asp:SqlDataSource> 
&nbsp;<asp:Button ID="btnGo" runat="server" Text="Go" /> 
&nbsp; 
<br /> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource3" ForeColor="#333333" GridLines="None" Visible="False"> 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <Columns> 
     <asp:BoundField DataField="whenCreated" HeaderText="whenCreated" SortExpression="whenCreated" /> 
     <asp:BoundField DataField="description" HeaderText="description" SortExpression="description" /> 
     <asp:BoundField DataField="firstName" HeaderText="firstName" SortExpression="firstName" /> 
     <asp:BoundField DataField="lastName" HeaderText="lastName" SortExpression="lastName" /> 
     <asp:BoundField DataField="Expr1" HeaderText="Expr1" SortExpression="Expr1" /> 
     <asp:BoundField DataField="Expr2" HeaderText="Expr2" SortExpression="Expr2" /> 
    </Columns> 
    <EditRowStyle BackColor="#999999" /> 
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
    <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
    <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
    <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT bugEntry.whenCreated, bugEntry.description, employee.firstName, employee.lastName, category.description AS Expr1, status.description AS Expr2 FROM bugEntry INNER JOIN category ON bugEntry.cat_id = category.cat_id INNER JOIN status ON bugEntry.status_id = status.status_id CROSS JOIN employee"> 


</asp:SqlDataSource> 
</asp:Content> 
+0

DropDownList1 имеет как текст, так и значение для одного и того же поля источника данных, вместо этого создает псевдоним внутри оператора select и присваивает соответствующее имя поля s в раскрывающемся списке. –

ответ

0

Сначала убедитесь, ваше падение вниз окно имеет AutoPostBack, onselectedindexchanged и DataValueField набор свойств, как показано ниже:

< «жерех: DropDownList ID = "DropDownList1" Runat = "server" DataSourceID = "SqlDataSource2" DataTextField = "description" AutoPostBack = "True"DataValueField = "ItemNo" DataTextField = "ItemName" onselectedindexchanged = "DropDownList1_SelectedIndexChanged">

Затем установить ObjectDataSource, который использует значение из DropDownList как его Select Parameter. Свяжите свой GridView с номером ObjectDataSource.

Наконец в методе DropDownList1_SelectedIndexChanged сделайте следующее:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ObjectDataSource1.DataBind(); 
    GridView1.DataBind(); 
} 

Его только либо ObjectDataSource1 или GridView1, который должен быть вызван, не могу вспомнить, который в данный момент.

0

я также этот сценарий это, как я решил

я связан мой Gridview с источником данных и построить запрос с помощью мастера SqlDataSource при настройке источник данных используют первый вариант «указать пользовательский SQL заявления или хранимые процедуры ", потому что вы используете несколько таблицу Теперь нажмите кнопку Далее и использовать конструктор запросов на Top первой панели окна щелкните правой кнопкой мыши и добавить таблицу выбрать столбец из таблицы в соответствии с вашим требованием

сейчас в панели запроса написать это в новой строке в конце

WHERE ([столбец] = @ колонка)

Теперь ОК и нажмите следующий

новое окно появится выбора источника параметров и управления ID нажмите кнопку Далее, и вы хорошо идти

надеюсь, что это поможет

Смежные вопросы