2013-08-17 27 views
1

我正在使用jquery.uix.multiselect。根據選定的選項(支付類別),gridview顯示付款清單。JQuery MultiSelect更新實體數據源

起初我使用的選擇框靜態選項值:

<select id="multiselectbox" multiple="true" size="4" 
    class="ui-multiselect" runat="server"> 
    <option value="11">Wine Expenses</option> 
    <option value="12">Subs Old</option> 
    <option value="13">Wine Receipts</option> 
    <option value="14">Bank Fees</option> 
    <option value="15">Bank Interest</option> 
    <option value="16">Honour Boards</option> 
</select> 

然後我得到所選類別值的代碼隱藏列表:

List<Int32> myIntList = new List<int>();; 
    for (int i = 0; i < multiselectbox.Items.Count; i++) 
    { 
     if (multiselectbox.Items[i].Selected) 
     { 
      CategoryIdList.Add(multiselectbox.Items[i].Value).Convert.ToInt32; 
     } 
    } 

,最終使用到爲我的實體數據源創建一個Where字符串:

if (myIntList.Count() != 0) 
    { 

     string concatenatedIds = string.Join(",", myIntList.ToArray()); 
     WhereClause = String.Format("{0} {1}{2}", "it.CategoryId IN {", concatenatedIds, "}"); 

    } 
    EntityDataSource1Payments.WhereParameters.Clear(); 
    EntityDataSource1Payments.AutoGenerateWhereClause = false; 
    EntityDataSource1Payments.Where = WhereString; 

所有工作都很好,直到我決定從數據庫中填充選擇框選項。

爲了做到這一點,我最終使用了一個WebMethod,使用AJAX和成功的方式對它進行了調用,multiselect中填充了來自數據庫的值和名稱對。但是,這導致我的PaymentCategory過濾器停止工作。 我的理由是,因爲multislect框現在正在填充javascript,服務器端代碼不知道什麼是在選擇框,所以multiselectbox.Items.Count與「0」和用於循環沒有做任何事情。

因此,我決定我將不得不使用JavaScript來獲取CategoryId值。我能在多選得到的值很容易:

<script type="text/javascript"> 
    function myButtonFunction() { 


      var selectedlist = $(".ui-multiselect").val(); 
      alert(selectedlist); 
      var finalObject = JSON.stringify(selectedlist); 
      alert(finalObject); 

      $.ajax({ 
       type: "post", 
       contenttype: "application/json; charset=utf-8", 
       url: "displaypayments.aspx/GetWhereString", 
       data: finalObject, 
       datatype: "json", 
       success: function() { 

       alert("seems to have gone okay"); }, 
       error: function() { alert("error"); } 
      }); 
     } 

</script> 

然而,儘管有類別ID值的正確列表,現在我不知道該怎麼處理它們。

解決方案1)首先嚐試將Ids列表發送到上面的WebMethod。但是我發現一個WebMethod必須是靜態的,所以我無法訪問那裏的EntityDataSource。然後我嘗試在後面的代碼中重置Where String,但是我的WebMethod無法調用Function(實例 - 靜態問題)。從進一步的閱讀中我得出了一個Web服務可能是答案 - 但後來我被卡住了,認爲我仍然必須使用它來重置EntityDataSource,或者訪問gridview以給它一個新的數據源,或者......。

解決方案2)更改方法,現在用Javascript更新實體數據源。但是,我無法解決如何做到這一點。我不知道如何通過JavaScript訪問實體數據源的Where屬性。從閱讀它似乎訪問控制與Java你需要訪問ClientIdMode屬性,所以你知道該怎麼稱呼它 - 但一個EntityDataSource沒有ClientIdMode ....

解決方案3)我也想過要去回到我填充選項的方式,並認爲我可以在代碼背後做到這一點 - 但它似乎沒有ASP選擇框,它只是HTML,所以如果我想用可愛的jquery-uix-multiselect,我必須填充它與JavaScript,不?

所以我的問題主要是關於我的方法。我已經得到了Ids列表,我有一個函數創建了一個很好的where條款過濾器,但我無法將這兩件事情結合在一起。我很高興回到幾個步驟,改變我做過的任何事情 - 我確信我正在接近這個難題的方式非常愚蠢。

回答