2013-06-26 84 views
0

好吧我有一些我正在構建的網站的代碼。我有一個數據綁定到SqlDataSource的列表框。選中時,它應該生成一個SQL查詢,用於更新\篩選頁面中其他列表框的其他列表框。我試過只是爲了讓它改變一個標籤的文本,甚至沒有工作。下面是我的一些代碼:雖然autopostback爲真,但Asp.net OnSelectedIndexChanged事件不能觸發

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 

     <%--register triggers for Partial postback --%> 
      <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="showbutton" EventName="Click" /> 
      <asp:AsyncPostBackTrigger ControlID="viewapps" EventName="Click" /> 
      </Triggers> 

      <ContentTemplate> 
     <%--- the controls in their rows and columns --%> 

      <%--column 1 --%> 
    <asp:Label runat="server" ID="TESTER">Text</asp:Label> 
    <asp:Panel runat="server" CssClass="column1"> 
     <asp:Panel ID="Panel1" runat="server" CssClass="row1"> 

      <%-- Make Panel --%> 

        <span style="padding:8px; position:relative;"> 
         <asp:Label ID="label1" runat="server" Text="Make" Font-Size="Large" ></asp:Label>  
         <asp:Listbox ID="MakeList" runat="server" Width="166px" SelectionMode ="Multiple" DataSourceID="MakeSource" DataTextField="MakeName" AutoPostBack="true" DataValueField="MakeID" OnSelectedIndexChanged="UpdateModels"> 
         </asp:Listbox> 
         </span> 
         <asp:SqlDataSource ID="MakeSource" runat="server" ConnectionString="<%$ ConnectionStrings:VCDBConnectionString %>" ></asp:SqlDataSource> 

     </asp:Panel> 

現在在我的C#代碼隱藏我有這樣的:

public void UpdateModels(object sender, EventArgs e) 
    { 

     //build a string for a SQL query for the Models 
     string newQuery = "SELECT M.[ModelID], M.[ModelName] FROM Model M INNER JOIN BaseVehicle BV ON BV.ModelID = M.ModelID Where BV.MakeID= '"; 
     string test = ""; 

     foreach (ListItem li in MakeList.Items) 
     { 
      //add each piece of the selected text to the string 
      if (li.Selected) 
      { 

       test += li.Value; 
       test += "' AND BV.MakeID= '"; 


      } 

      int cleanup = test.LastIndexOf("' AND BV.MakeID= '"); 
      test.Remove(cleanup-19,cleanup); 
      //ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", "alert('" + test + "');", true); 
      TESTER.Text = test; 

     } 

但還是測試儀沒有被更新。即使AutoPostBack = true,即使整個事情被包裝在更新面板中。 =(我需要一些幫助搞清楚這一個。 我也希望任何其他建議。 我將很高興爲您提供可能需要的任何額外的信息,只是讓我知道了意見。

回答

0

String.remove做不工作的方式,我想它是這樣的,這導致運行時異常,直到我沒有顯示出來,直到我調試,這就是爲什麼TESTER的文本沒有得到更新。方式。

而不是立即建立串並試圖棘手的字符串操作,而不是我只是把每個字符串轉換成列表,然後除去最後一個項目最後的結尾。 然後,一旦我有完善的名單,然後我把它添加到字符串。

在代碼中,它看起來是這樣的:

 List<string> queryBuilder = new List<string>(); 

    //add the seleted items to items in the list 
      foreach (ListItem li in MakeList.Items) 
      { 

       if (li.Selected) 
       { 
        queryBuilder.Add(li.Value);     
        queryBuilder.Add("' OR BV.MakeID = '"); 


        //build the list of selected makes for later use 
        selectedMakes.Add(li.Value); 
       } 
      } 
       try 
       { 
        //remove the last ' AND BV.MakeID= ' 
        queryBuilder.RemoveAt(queryBuilder.Count-1); 

        //add back the ' and the orderby 
        queryBuilder.Add("'"); 
        queryBuilder.Add(" ORDER BY [ModelName]"); 

        //build the string 
        foreach(string s in queryBuilder){ 

         newQuery+= s; 

        } 


        //debug for visibilty 
        TESTER.Text =newQuery; 
相關問題