1

データベースのテーブルからロードされた「ファーストネーム」のアイテムを含むリストボックスがあります。

  1. 今、ユーザーが「a」のように入力すると、「a」で始まるすべての名前がリストボックスに表示される自動入力機能が必要です
  2. いくつかのボタンをクリックすると、元のデータがリストボックスに再入力されます

2番目のもの、つまり。以下のコードでできることを願っています

protected void btnRePopulate_Click(object sender, EventArgs e)
{
    DataSet oDs = ReadDataSet();
    Listbox1.DataTextField = "Name";
    Listbox1.DataValueField = "ID";
    Listbox1.DataSource = oDs;
    Listbox1.DataBind();
}

しかし、最初は私が取り組んでいることがいくつかあります(ユーザーが「a」などを入力したときに発生するテキストボックスのキーアップイベントを使用しています)

  1. リストボックスをクリアし、「a」で始まる名前を追加しますが、クライアント側から可能かどうかはわかりません
  2. または、元のリストボックスからフィルタリングされた名前で別のリストボックスを表示し、元のリストボックスを非表示にします。
  3. いいえ、Ajax オートフィルを使用したくありません

上記の2つ以外に良いオプションはありますか...

4

1 に答える 1

0

このフィルタリングとリセットは、クライアント側で行うのが最適です。そうすれば、不要なサーバー呼び出しを行わなくなります。これはjQueryの拡張メソッドです。

$(function() {
  $('#select').filterByText($('#textbox'), true);
}); 

延長方法:

jQuery.fn.filterByText = function(textbox, selectSingleMatch) {
  return this.each(function() {
    var select = this;
    var options = [];
    $(select).find('option').each(function() {
      options.push({value: $(this).val(), text: $(this).text()});
    });
    $(select).data('options', options);
    $(textbox).bind('change keyup', function() {
      var options = $(select).empty().scrollTop(0).data('options');
      var search = $.trim($(this).val());
      var regex = new RegExp(search,'gi');

      $.each(options, function(i) {
        var option = options[i];
        if(option.text.match(regex) !== null) {
          $(select).append(
             $('<option>').text(option.text).val(option.value)
          );
        }
      });
      if (selectSingleMatch === true && 
          $(select).children().length === 1) {
        $(select).children().get(0).selected = true;
      }
    });
  });
};

これは、Lessan Vaezi のブログで、その方法に関するライブ デモと共に見つけました。

于 2013-01-03T05:11:08.923 に答える