2016-12-19 5 views
1

Вот моя ситуация. Я хочу выполнить пейджинг, группировку и фильтрацию. Так что я использую метод page_init. В соответствии с моим кодом он работает нормально. Но пользователь может только указать условия условия, такие какКак получить значение текстового поля в методе Page_init в asp.net?

Например, у меня есть текстовое поле на моей странице. что текстовое поле ID="txtQuery", в этом пользователе текстового поля будет ввести где положение как itemID='45366' Так я должен сделать мой код, как показано ниже

cmd.commandText="select * from TABLE_NAME where "+txtQuery.text 

Так это покажет запись. Это проблема сейчас. Когда я делаю cmd.commandText как выше он выдает сообщение об ошибке

System.Data.SqlClient.SqlException: Неправильный синтаксис около «где».

Если я даю напрямую, он работает нормально, без каких-либо ошибок.

Это мой код

string whereQuery = ""; 
protected void Page_Init(object sender, EventArgs e) 
{ 
    // initialize SomeDataTable 
    if (IsPostBack) 
    { 
     string cs = ConfigurationManager.ConnectionStrings["HQMatajerConnectionString"].ConnectionString; 
     whereQuery = getWhereQuery(); 
     //Response.Write("<br/><br/><br/><br/>" + whereQuery); 
     using (SqlConnection con = new SqlConnection(cs)) 
     { 
      string query = @"select transactions.storeid as StoreID, YEAR(transactions.Time) Year, MONTH(transactions.Time) Month, 
         transactionsEntry.TransactionNumber,transactionsEntry.Quantity, 
         items.ItemLookupCode,items.DepartmentID,items.CategoryID,items.SubDescription1, 
         suppliers.SupplierName,suppliers.Code 
         FROM  [HQMatajer].[dbo].[Transaction] as transactions 
         RIGHT JOIN [HQMatajer].[dbo].[TransactionEntry] as transactionsEntry 
         ON transactions.TransactionNumber=transactionsEntry.TransactionNumber 
         INNER JOIN [HQMatajer].[dbo].[Item] as items 
         ON transactionsEntry.ItemID=items.ID 
         INNER JOIN [HQMatajer].[dbo].[Supplier] as suppliers 
         ON items.SupplierID=suppliers.ID 
         where "+whereQuery; //I tried with txtQuery.text as well it doesn't work 

      SqlCommand cmd = new SqlCommand(); 



      cmd.Connection = con; 
      cmd.CommandText = query; 
      con.Open(); 

      SqlDataAdapter sda = new SqlDataAdapter(cmd); 

      sda.Fill(ds); 
      //SqlDataReader rd = cmd.ExecuteReader(); 

      //ASPxGridView1.Columns.Clear(); 
      ASPxGridView1.AutoGenerateColumns = true; 
      ASPxGridView1.DataSource = ds; 
      ASPxGridView1.DataBind(); 
     } 
    } 

} 


protected string getWhereQuery() 
{ 
    string query = txtQuery.Text; 
    return query; 
} 

ответ

2

По умолчанию (при первой загрузке страницы) вы txtQuery.Text пуст, измените getWhereQuery на:

protected string getWhereQuery() 
{ 
    string query = txtQuery.Text; 
    if(string.IsNullOrEmpty(query)) 
    query=" 1=1"; 
    return query; 
} 
+0

Теперь Как я могу получить значение текстового окна Теперь? –

+1

Но приведенный выше код уже делает это для вас, почему бы не назвать все это в Page_Load, а не в Page_Init –

+0

Вы верны. Теперь я понимаю. Тогда какое использование метода page_init ?. Можете ли вы объяснить PLZ –