0

現在、テーブルに格納されている値に基づいて、レポート グリッドにツールヒントを設定しています。これを行うのは、多数のグリッドと多数のツールチップがあり、ソース コードを更新せずにそれらすべてを 1 か所から簡単に管理できるためです。

私の質問。この方法でツールチップをロードするのと、すべてのツールチップを一度にロードして配列をループすることでロードするのとでは、どちらが高速ですか?

すべてのツールチップに対する 1 回の SP 呼び出しは、10-20 回よりも高速になるようです。この仮定は正しいですか?もしそうなら、配列またはリストでこれを行う方法の例を見ることができますか?

            sqlconn.Open();
        SqlCommand com = new SqlCommand("sp_ToolTipLookup", sqlconn) { CommandType = System.Data.CommandType.StoredProcedure };
        SqlParameter pFieldName = new SqlParameter("@FieldName", "");
        for (int i = 0; i < rptgrid.Columns.Count; i++) 
        {
            pFieldName.Value = rptgrid.Columns[i].ToString();
            com.Parameters.Add(pFieldName); //adding the field name to the SP
            SqlDataReader data = com.ExecuteReader(); //Open the SP
            if (data.Read()) rptgrid.Columns[i].ToolTip = data["ToolTip"].ToString(); //If there is a resulting Tooltip, apply it to the grid
            data.Close();
            com.Parameters.Remove(pFieldName);
        }
        sqlconn.Close();

リストを使用した例は、次のようになります (これがより高速である場合は、セッションごとに 1 回リストをロードして、メモリに保存するだけでよい可能性があります)。

sqlconn.Open();
        SqlCommand com = new SqlCommand("Select * from ToolTips", sqlconn) { CommandType = System.Data.CommandType.Text };
        SqlDataReader data = com.ExecuteReader();
        List<ToolTip> tips = new List<ToolTip>();
        while (data.Read())
        {
            tips.Add(new ToolTip { fieldname = data["FieldName"].ToString(), tooltip = data["ToolTip"].ToString() } );
        }



        for (int i = 0; i < rptgrid.Columns.Count; i++) //Changed to visible column to speed it up a bit.
        {
            for (int x = 0; x < tips.Count; x++)
            {
                if (rptgrid.Columns[i].Name == tips[x].fieldname)
                {
                    rptgrid.Columns[i].ToolTip = tips[x].tooltip;
                }
            }
        }
        data.Close();
        sqlconn.Close();
4

4 に答える 4

1

ストアド プロシージャsp_ToolTipLookupは少なくともデータToolTipとを返す必要FieldNameがありますが、where 句のツール ヒント名に関するフィルターを削除する必要があります。

string connectionString = ... //web|app.config

using (SqlConnection sqlconn = new SqlConnection(connectionString)){
   using(SqlCommand com = new SqlCommand("sp_ToolTipLookup", sqlconn)){

       com.CommandType = System.Data.CommandType.StoredProcedure 

       sqlconn.Open();
       using (SqlDataReader data = com.ExecuteReader()){ //Call the SP

           while(data.Read()) {
               foreach(var col in rptgrid.VisibleColumns){
                   if (col.Name == data["FieldName"].ToString()){
                       rptgrid.VisibleColumns[col.Index].ToolTip = data["ToolTip"].ToString();
                   }
               }
           }
       }
   }
}
于 2016-12-30T17:09:14.413 に答える
1

SP が効率的に設計されていれば、すべてのツールチップをロードする 1 つの SP 呼び出しを修正する方が高速です。

于 2016-12-30T16:45:19.507 に答える