DataList不更新

时间:2015-04-12 20:43:46

标签: c# asp.net ms-access sqldatasource datalist

我已经被困在这个问题上好几个小时了,我确实尝试了一切,但没有任何作用!

所以我在按钮点击事件中有这段代码:

 protected void btn_search_Click(object sender, EventArgs e)
 {
        string query;
        int make = System.Convert.ToInt32(make_list.SelectedValue);
        int model = System.Convert.ToInt32(model_list.SelectedValue);

        query = "SELECT c.owner_id, u.first_name, u.last_name, City.city, Makes.make, Models.model, Type.type, Colours.colour, [Year].[year], c.price, c.photo1, c.photo2, c.photo3, c.ID AS carID FROM (((((((Cars c INNER JOIN Users u ON c.owner_id = u.ID) INNER JOIN City ON u.city_id = City.ID) INNER JOIN Models ON c.model_id = Models.ID) INNER JOIN Makes ON Models.make_id = Makes.ID) INNER JOIN Type ON Models.type_id = Type.ID) INNER JOIN Colours ON c.colour_id = Colours.ID) INNER JOIN [Year] ON c.year_id = [Year].ID) WHERE ";

        if (make != 1)
        {
            query = query + "Models.make_id = @make";
            SearchDataSource.SelectParameters.Add("make", make.ToString());
        }
        else
        {
            query = query + "Models.make_id > 0";
        }

        if (model != 1)
        {
            query = query + " AND c.model_id = @model";
            SearchDataSource.SelectParameters.Add("model", model.ToString());
        }
        else
        {
            query = query + " AND c.model_id > 0";
        }


     SearchDataSource.SelectCommand = query;
     DataList1.DataBind();

 }

因此,查询从Cars表中检查是否存在某个汽车,具体取决于下拉列表中的用户输入,同时将相关表连接在一起以获得我想要的结果。在我的汽车表中,只有1辆汽车与#34; Alfa Romeo"以及#34; 4C"的模型。

在我的XAML中,我有:

 <asp:SqlDataSource ID="SearchDataSource" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\4WheelsDB.mdb;Persist Security Info=True" ProviderName="System.Data.OleDb">
  </asp:SqlDataSource>
    <asp:DataList ID="DataList1" runat="server" DataSourceID="SearchDataSource">
      <ItemTemplate>
         <asp:Label ID="lblmake_id" runat="server" Text='<%# Eval("make") %>' />
      </ItemTemplate>
    </asp:DataList>

所以当我在Access中测试这个查询时,make值为2,即Alfa Romeo,Model值为2,即4C,则返回1行,这是完美的。当我用模型值3测试阿尔法罗密欧是Giuletta时,它不返回任何行也是完美的。

因为它们对查询没有任何问题,是时候测试一下它是如何在网站上进行测试的,当我在网站上测试它时我会选择Alfa Romeo 4C并在项目列表中显示make,但是当我选择时阿尔法罗密欧Giuletta它仍然显示项目列表中的品牌,但当我重新加载整个页面并选择阿尔法罗密欧Giuletta它没有显示什么,当我选择阿尔法罗密欧4C时,它再也没有显示!

所以似乎我必须刷新页面以显示预期的结果,老实说,我不知道它为什么这样做,但我已经尝试过Disposing然后DataBinding DataList在Click之前的任何其他东西,但是没有任何效果!

有谁知道问题是什么?如果您需要我进一步解释,请询问,谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个......

在: SearchDataSource.SelectCommand = query;

ADD: DataList1.Databind()