GridView не отражает изменения AJAX - PullRequest
0 голосов
/ 13 июля 2011

Я использую AJAX прямо сейчас, чтобы обновить мой GridView, когда я ищу строку текста в виде сетки, или когда я выбираю из выпадающего списка, по которому я хочу упорядочить Gridview. Это работало ранее, но у меня был действительно грязный код. Так что я немного почистил, добавил некоторые параметры и тому подобное. К сожалению, теперь, когда выбранный индекс выпадающего списка изменяется или когда кто-то пытается найти поле, ничего не происходит - страница просто обновляется. Я также получаю исключение, говорящее: «Элемент SELECT, идентифицируемый номером 1 ORDER BY, содержит переменную как часть выражения, идентифицирующего позицию столбца. Переменные допускаются только при упорядочении по выражению, ссылающемуся на имя столбца».

Если вам нужно увидеть больше кода, пожалуйста, дайте мне знать!

public vieworders()
    {
        this.PreInit += new EventHandler(vieworders_PreInit);
    }

    void vieworders_PreInit(object sender, EventArgs e)
    {
            orderByString = orderByList.SelectedItem.Value;
            fieldString = searchTextBox.Text;
            updateDatabase(fieldString, orderByString);

    }

    protected void updateDatabase(string _searchString, string _orderByString)
    {
        string updateCommand = "SELECT fName,lName,zip,email,cwaSource,price,length FROM SecureOrders WHERE fName LIKE @searchString OR lName LIKE @searchString OR zip LIKE @searchString OR email LIKE @searchString OR cwaSource LIKE @searchString OR length LIKE @searchString OR price LIKE @searchString ORDER BY @orderByString";

        Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Cabot3");
        ConnectionStringSettings connectionString = rootWebConfig.ConnectionStrings.ConnectionStrings["secureodb"];

        // Create an SqlConnection to the database.
        using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
        using (SqlCommand _fillDatabase = new SqlCommand(updateCommand, connection))
        {

            connection.Open();
            _fillDatabase.Parameters.Add("@searchString", SqlDbType.VarChar, 50).Value = _searchString;
            _fillDatabase.Parameters.Add("@orderByString", SqlDbType.VarChar, 50).Value = _orderByString;
            _fillDatabase.ExecuteNonQuery();

            dataAdapter = new SqlDataAdapter("SELECT * FROM SecureOrders", connection);

            // create the DataSet
            dataSet = new DataSet();
            // fill the DataSet using our DataAdapter               
            dataAdapter.Fill(dataSet, "SecureOrders");

            DataView source = new DataView(dataSet.Tables[0]);
            DefaultGrid.DataSource = source;
            DefaultGrid.DataBind();
            connection.Close();
        }
    }

Форма

<form id="form1" runat="server">
<asp:ScriptManager ID = "ScriptManager" runat="server" />
    <div>
        <asp:Label runat="server" id = "orderByLabel" Text = "Order By: " />


        <asp:DropDownList runat="server" ID="orderByList" AutoPostBack="true">
            <asp:ListItem Value="fName" Selected="True">First Name</asp:ListItem>
            <asp:ListItem Value="lName">Last Name</asp:ListItem>
            <asp:ListItem Value="state">State</asp:ListItem>
            <asp:ListItem Value="zip">Zip Code</asp:ListItem>
            <asp:ListItem Value="cwaSource">Source</asp:ListItem>
            <asp:ListItem Value="cwaJoined">Date Joined</asp:ListItem>
        </asp:DropDownList>
    </div>
    <div>
        <asp:Label runat="server" ID="searchLabel" Text="Search For: " />
        <asp:TextBox ID="searchTextBox" runat="server" Columns="30" />
        <asp:Button ID="searchButton" runat="server" Text="Search" />
    </div>
<div>
<asp:UpdatePanel ID = "up" runat="server">



    <ContentTemplate>
    <div style= "overflow:auto; height:50%; width:100%">
    <asp:GridView ID="DefaultGrid" runat = "server" DataKeyNames = "IdentityColumn"
    onselectedindexchanged = "DefaultGrid_SelectedIndexChanged"
    autogenerateselectbutton = "true">
    <SelectedRowStyle BackColor="Azure"
    forecolor="Black"
    font-bold="true" />
    <Columns>
    <asp:TemplateField HeaderText="Processed">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBoxProcess" AutoPostBack = "true" Checked ='<%#Eval("processed") %>' OnCheckedChanged="CheckBoxProcess_CheckedChanged"  runat="server" Enabled="true" />
                </ItemTemplate>
            </asp:TemplateField>
    </Columns>
    </asp:GridView>
    </div>
    </div>
    <div style= "overflow:auto; height:50%; width:100%" />
    <table border="1">
        <tr>    
        <td>Name: </td>
        <td><%=name %></td>
        </tr>
        <tr>
        <td>Zip: </td>
        <td><%=zip %></td>
        </tr>
        <tr>
        <td>Email: </td>
        <td><%=email %></td>
        </tr>
        <tr>
        <td>Length: </td>
        <td><%=length %></td>
        </tr>
        <tr>
        <td>Price: </td>
        <td><%=price %></td>
        </tr>
        <tr>
        <td>Source: </td>
        <td><%=source %></td>
        </tr>
    </table>
    </div>
    </ContentTemplate>
    </asp:UpdatePanel>



</div>
</form>

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Я никогда не использовал UpdatePanel, так как моя компания использует Telerik, но из примеров, которые я вижу в ходе своего исследования, я помню, что видел компонент триггера.

Насколько я понимаю, если этот элемент управления имеет i / UpdatePanelсам по себе, вам не нужно указывать триггер, поскольку он предполагается.

Для вашего сценария триггер (выпадающий список) находится за пределами UpdatePanel.Возможно, вам придется включить это в ваш aspx:

<asp:UpdatePanel ID = "up" runat="server">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="orderByList" >
</Triggers>
<ContentTemplate>
    ...
0 голосов
/ 13 июля 2011

Попробуйте следующее:

  1. В HTML переместите панель обновления сразу после строки диспетчера сценариев.
  2. Переместите строки кода в vieworders_PreInit в vieworders_PageLoad с предложением! IsPostPack.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...