0

私のアプリケーションでは、これらのリストで選択されたさまざまな値の関数でいくつかのテーブルを表示するために、いくつかのドロップダウンリストを組み込む必要があります。しかし、1つのリストで値を選択すると、他のリストが値の関数を入力し、その方法がわかりません。

私のアプリケーションでは、次のようなRawクエリのみを使用します。

        string requeteAppli ="select distinct CD_APPLI, ORDRE_APPLI from dbo.REF_APPLI where CD_APPLI != 'PNB' order by ORDRE_APPLI";

そのようにそれらを実行するための関数で:

public List<DataRow> executerRequete(string query)
    {
        //Initialisation d'une variable Liste contenant des lignes de données où seront récupérés les résultats de la requête suivante.
        List<DataRow> liste = null;

        //Création d'une variable de connection où sont stockés toutes les informations nécessaires à la connexion à la base de données.
        //Ces informations sont stockées dans le fichier de config Web.config.
        string connString = ConfigurationManager.AppSettings["REF_ConnectionString"];

        //Création d'un objet instance de SqlConnection (classe permettant la connexion ouverte à une base de données) où est stocké le contenu de la variable connString.
        using (SqlConnection conn = new SqlConnection(connString))
        {
            //Création d'un objet de commande permettant de spécifier comment la commande sera inteprétée, ici en commande de texte SQL avec CommandType.Text.
            using (SqlCommand objCommand = new SqlCommand(query, conn))
            {
                //Création d'un objet de commande permettant de spécifier comment la commande sera inteprétée, ici en commande de texte SQL avec CommandType.Text.
                objCommand.CommandType = CommandType.Text;
                //Création d'un objet instance de DataTable qui va récupérer la résultat de la requête.
                DataTable dt = new DataTable();
                //Création d'un objet instance de SqlDataAdapter qui va effectuer le lien avec SQL Server afin de récupérer les données.
                SqlDataAdapter adp = new SqlDataAdapter(objCommand);
                //Ouverture de la connexion.
                conn.Open();
                //L'instruction FILL récupère les données de la source de données et les insère dans dt.
                adp.Fill(dt);
                //Vérification du contenu de dt.
                if (dt != null)
                {
                    //Remplissage de la liste.
                    liste = dt.AsEnumerable().ToList();
                }
            }
        }

        //Le résultat est retournée à l'action.
        return liste;
    }

問題はこれらのクエリにあります。ASP.NETMVCとjQueryを使用してカスケードドロップダウンリストを実装する方法のチュートリアルをたくさん見てきましたが、このスタイルのクエリではなく、完全に混乱していて、できません。それらを変更します。

私はそのような私の行動でこれらのクエリの結果を取得します:

var queries = new query();
var items = rq.executerRequete(requeteIndex);
queries.Query2 = (from i in items2
                  select new Suivi { CD_APPLI = i.Field<String>("CD_APPLI") }).ToList();

私の目標は、アプリケーションの最初のリストを作成し、ユーザーが1つの値を選択すると、(選択したアプリケーションに応じて)日付を含む別のリストが機能を入力することです。選択したアプリケーションの機能で日付を取得するクエリは次のとおりです。

var itemsDate = rq.executerRequete(requetePERIODE);
var periode = (from i in itemsDate
               where i.Field<String>("CD_APPLI").Trim() == appli.Trim()
               select new Suivi { PERIODE = i.Field<Int64>("PERIODE") });

私はこれらのカスケードドロップダウンリストに完全に迷いました、そして私は本当にあなたの助けが必要です:/あなたがコードを必要とするなら、私はあなたにこれを与えることができます、しかし私がこれらのリストのためにいくつかの解決策を試したとしても、私はあなたに私の例を与えることができませんコード(javascript)それはまったく機能せず、私は何もしませんので、私のコードは単にたくさんのでたらめです...

4

3 に答える 3

2

サーバーサイドでは、アプリケーションのドロップダウンにアプリケーションIDと表示するものを入力します

クライアントサイドでは、最初のドロップダウンリストの変更イベントに関数をアタッチして、データをフェッチし、次のように日付ドロップダウンに入力する必要があります。

    $(document).ready(function(){
     $('#CboApplications').change(function() {
      function getDates() {
      $.ajax({
          type: "POST",
          url: "Reg_Form.aspx/GetDates",
          data: "{'applicationId':" + ( $('#CboApplications').val()) + "}",
          contentType: "application/json; charset=utf-8",
          global: false,
          async: false,
          dataType: "json",
          success: function(jsonObj) {
             for (var i = 0; i < jsonObj.Table.length; i++){
               listItems+= "<option value='" + jsonObj.Table[i].PERIODE+ "'>" + jsonObj.Table[i].PERIODE+ "</option>";
              }
             $("#cboDates").html(listItems);
        }
    });
    return false;
}
    });

データを取得するには、クエリコードを実行するWebメソッドまたはWebメソッドを備えたWebサービスが必要になります

<WebMethod()> _
Public Sub GetDates(ByVal applicationId As String)
    //use correct qry based on applicationId 
    var itemsDate = rq.executerRequete(requetePERIODE);
    var periode = (from i in itemsDate
           where i.Field<String>("CD_APPLI").Trim() == appli.Trim()
           select new Suivi { PERIODE = i.Field<Int64>("PERIODE") });
    Return periode 
End Sub

私は自分でATMをテストできないので、このコードは100%正確ではありませんが、概念はあなたを助けるかもしれません

ページ内のwebmethodの例(重要なのは静的、webMethod、およびajax呼び出しのScriptMethodです)

public partial class Products : System.Web.UI.Page 

   { 
    [System.Web.Services.WebMethod()] 
    [System.Web.Script.Services.ScriptMethod()] 
    public static List<Product> GetProducts(int cateogryID) 
    {
      // Put your logic here to get the Product list 
    }
于 2012-12-17T13:35:32.513 に答える
0

うん !!!できます !!

問題は、2番目のリストの結果を取得するクエリにありました。私はそれをしなければなりませんでした:

var periode = (from i in itemsDate
                       where i.Field<String>("CD_APPLI").Trim() == appli.Trim()
                       select new { value = i.Field<Int64>("PERIODE").ToString(), text = i.Field<Int64>("PERIODE").ToString() });

そしてそれではありません:

            var periode = (from i in itemsDate
                       where i.Field<String>("CD_APPLI").Trim() == appli.Trim()
                       select new SelectListItem { Value = i.Field<Int64>("PERIODE").ToString(), Text = i.Field<Int64>("PERIODE").ToString() });

私のコードの残りの部分は、2番目の答えに対して変更されていません。

次に、3番目のリストを試してみます。他に問題がある場合は、ここに戻ります。

本当にありがとう、ufosnowcat:D

于 2012-12-18T13:36:28.910 に答える
0

最後のコメントへの回答として

選択してくださいを追加すると、1つの方法になります。3Dリストのデータのリターン関数で、位置0に値を挿入します'選択してください'ユーザーにアクションをトリガーさせます

他のオプションは次のとおりです。1).change関数で呼び出すロジックを別の関数に配置すると、複数の場所から簡単に呼び出すことができます。

次に、current(3d)リストに入力した後に変更関数をバインドする場所で、リストに項目が1つしかないかどうかを確認します。その場合は、関数を呼び出して4番目のリストに入力し、これを各リストの入力に統合できます。

$.each(months, function (index, periode) {... }));

次のようなものを入れてください(生理で何ができるかを確認してください)

if (periode.count() == 1) {fillnextList();};
于 2012-12-19T12:51:33.510 に答える