1

jquery.uix.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 で呼び出して成功しました。複数選択には、データベースからの値と名前のペアが入力されました。ただし、これにより PaymentCategory フィルターが機能しなくなりました。その理由は、マルチセレクトボックスにJavaScriptが入力されたため、サーバー側のコードがセレクトボックスの内容を認識できなかったため、multiselectbox.Items.Countが「0」になり、forループが発生したためです。何もしませんでした。

そのため、CategoryId 値を取得するには JavaScript を使用する必要があると判断しました。multiselect の値を非常に簡単に取得できました。

<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>  

ただし、CategoryId 値の正しいリストがあるにもかかわらず、それらをどう処理すればよいかわかりません。

解決策 1) まず、ID のリストを上記の WebMethod に送信してみました。しかし、WebMethod は静的でなければならないことがわかったため、そこにある EntityDataSource にもアクセスできませんでした。次に、Where String をリセットするためにコード ビハインドで関数を作成しようとしましたが、WebMethod は関数を呼び出すことができませんでした (インスタンス - 静的な問題が再び発生しました)。さらに読んだ結果、Web サービスが答えになる可能性があることがわかりましたが、それを使用して EntityDataSource をリセットするか、gridview にアクセスして新しいデータソースを与えるか、または....

解決策 2) アプローチを変更し、エンティティ データ ソースを Javascript で更新します。ただし、これを行う方法がわかりません。エンティティ データ ソースの Where プロパティに JavaScript でアクセスする方法がわかりません。読んでみると、Java を使用してコントロールにアクセスするように見えますが、ClientIdMode プロパティにアクセスする必要があるため、それを何と呼ぶか​​がわかりますが、EntityDataSource には ClientIdMode がありません....

解決策 3) また、オプションにデータを入力する方法に戻ることも考えましたが、コード ビハインドでこれを行うことができると考えましたが、ASP 選択ボックスはないようで、HTML のみであるため、素敵な jquery を使用したい場合は、 uix-multiselect javascript を入力する必要があります。いいえ???

したがって、私の質問は主に私のアプローチに関するものです。Id のリストと、適切な whereclause フィルターを作成する関数がありますが、この 2 つをまとめることはできません。2、3 歩戻って、これまでのやり方を変えてよかったと思います。このパズルへの取り組み方には、非常にばかげたところがあると確信しています。

4

1 に答える 1