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 歩戻って、これまでのやり方を変えてよかったと思います。このパズルへの取り組み方には、非常にばかげたところがあると確信しています。