DataTable, zmiana parametrów zapytania

Odpowiedz Nowy wątek
2011-09-13 04:46
Niezły
0

Jakiś miesiąc temu zacząłem przygodę z programowaniem i jakoś nie za bardzo mi to idzie:) Mam problem ze zmianą parametrów zapytania filtrującego informacje przedstawiane w kontrolce GridView.
Chcę żeby po pierwszym zładowaniu strony były widoczne wszystkie informacje zawarte w tabeli MySQL a następnie użytkownik mógł modyfikować parametry zapytania SQL poprzez odpowiednie kontrolki na stronie. Gdzie i jak powinienem definiować i przypisać odpowiednie wartości zmiennym? Zdaje sobie sprawę z trywialności mojego problemu ale mimo wszystko liczę na waszą wyrozumiałość i pomoc:)

a tu fragment kodu z mojej strony aspx.cs:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using MySql.Web.Security;
using System.Data;
using System.IO;
using System.Text;

namespace WebApplication3
{
    public partial class Podstrona3 : System.Web.UI.Page
    {  
        //int zmienna1;
        //string zmienna2;
public void Page_Load(object sender, EventArgs e)
        {
            Page.DataBind()
        }
public void btnFiltruj(object sender, EventArgs e)
        {
         int zmienna1=Convert.ToInt32(CheckBox1.Checked);
         string zmienna2=dpl1.SelectedValue;
         // zmienna1=Convert.ToInt32(CheckBox1.Checked);
          // zmienna2=dpl1.SelectedValue; 
         }
       public DataTable GetData()
         {
         // int zmienna1=Convert.ToInt32(CheckBox1.Checked);
         // string zmienna2=dpl1.SelectedValue; 

             DataTable dt = new DataTable();

             dt.Columns.Add(new DataColumn("Kolumna1", typeof(int)));
             dt.Columns.Add(new DataColumn("Kolumna2", typeof(string)));
             dt.Columns.Add(new DataColumn("Kolumna3", typeof(string)));
             dt.Columns.Add(new DataColumn("Kolumna4", typeof(string)));
             dt.Columns.Add(new DataColumn("Kolumna5", typeof(string)));

             DataRow dr = dt.NewRow();
             connString = "Server =localhost; Port =****; Database = end; Uid = ******; Password =*********;";
             MySqlConnection conn = new MySqlConnection(connString);

             KomendaPobieranieIdUytkownika = conn.CreateCommand();
             KomendaPobieranieIdUytkownika.CommandText = "SELECT Kolumna1, Kolumna2, Kolumna3,Kolumna4 , Kolumna5 from MojaTabelaMySql where Kolumna2 ='"+zmienna2+"' and Kolumna1=('zmienna1' or 1)  ;";
             conn.Open();
             MySqlDataReader odczytaj;
             odczytaj = KomendaPobieranieIdUytkownika.ExecuteReader();

             string url;
             string z;
             string url2;

             while (odczytaj.Read())
             {

                 url = odczytaj.GetString(4);                 
                 url2 = Server.MapPath(url);
                 string[] foty = System.IO.Directory.GetFiles(url2);
                 z = GetFileName(foty[0]);
                 StringBuilder a = new StringBuilder();
                 url = Convert.ToString(a.Append(url).Append("\\").Append(z));
                 dr["Kolumna1"] = odczytaj.GetInt32(0);
                 dr["Kolumna2] = odczytaj.GetString(1);
                 dr["Kolumna3"] = odczytaj.GetString(2);
                 dr["Kolumna4"] = odczytaj.GetString(3);
                 dr["Kolumna5"] = url;

                 dt.Rows.Add(dr);
                 dr = dt.NewRow();

             }
             odczytaj.Close();
             conn.Close();

             return dt;

         }
}

Pozostało 580 znaków

2011-09-13 17:05
Niezły
0

Chyba sobie poradziłem ale sposób nie wydaje mi się zbytnio elegancki...
Dla każdej kontrolki utworzyłem HiddenField- w którym przechowuję wartość zmiennych(parametrów wyszukiwania).
Ustawiłem AutoPostBack="true" i dodałem zdarzenia On(np Checked)Changed, w którym zmieniam wartość HiddenField w zależności od stanu kontrolki.
Zmienne( określające parametry wyszukiwania/filtrowania) deklaruję wewnątrz DataTable i przypisuje im wartości przechowywane w HiddenField'ach.
Całość chyba będę musiał umieścić w UpdatePanel, żeby nie było "migania" na stronie i żeby zapytanie nie było wykonane "automatycznie" po każdej kolejnej zmianie wartości kontrolek.
Ma ktoś lepszy pomysł bo wydaje mi się, że serwer będzie bombardowany ciągłymi zmianami w kontrolkach????

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0