2014-12-13 2 views
1

모든 검색 후에 제품의 총 수를 표시하려고하므로 신청서에 도움이 필요합니다! 나는 라디오 버튼 목록과 하나의 검색 상자를 사용하여 제품을 검색 할 때마다 테이블 Product에서 매번 한 행을 표시하는 select 문을 작성했습니다. 검색은 Username 또는 Product Id 중 하나 일 수 있습니다. 그런 다음 사용자는 행을 선택하고 gridview에서 삭제할 수 있습니다. 나는 또한 남은 제품의 수를 보여줄 수있는 레이블을 붙였다. 이 레이블은 그리드보기에서 제품 수를 줄 수 있습니다. 내 문제는 내가 사용하는 레이블이 단지 기록만을 생성하는 제 1 번을 보여주고 총 제품 수를 보여줘야한다는 것입니다.select 테이블에서 선택하십시오.

코드 :

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 

    public partial class Admin_AdminUserControl_Product : System.Web.UI.UserControl 
    { 
     DataBaseConn Db = new DataBaseConn(); 

     Basket _b = new Product(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 


     // Label shows only one record at a time 
     lblQueue.Text = _b.Queue().ToString(); 


    } 



    protected void btnSearch_Click(object sender, EventArgs e) 
    { 
    grid.DataSource = _b.SelectRow(rdoField.SelectedValue,txtSearch.Text); 
    grid.DataBind(); 
     lblMsg.Text = ""; 
     btnRemove.Enabled = false; 
     grid.SelectedIndex = -1; 
    } 
    protected void btnRemove_Click(object sender, EventArgs e) 
    { 
     if (_b.RemoveProduct(grid.SelectedRow.Cells[1].Text)) 

     lblMsg.Text = "Product is removed"; 
     else 
      lblMsg.Text = "Unable to remove a Product!"; 
    grid.DataBind(); 
    btnRemove.Enabled = false; 
    } 
    protected void grid_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     btnRemove.Enabled = true; 
} 

클래스 제품

public DataTable Data(string txtField, string Value) 
    { 

    string SQL = String.Format("Select * from Product where {0} like'%{1}%'", txtField, Value); 
    return Data(SQL); 

} 
public DataTable Data(string Query) 
{ 
    try 
    { 
     return Db.RunQuery(Query); 
    } 
    catch 
    { 
     return new DataTable(); 
    } 

} 

public bool RemoveProduct(string ProductId) 
{ 

    this.ProductID = ProductId; 
    return Delete(); 
} 

public DataTable SelectRow(string Field, string Value) 
{ 

    string sql = string.Format("SELECT TOP 1 * FROM Product where {0} like '%{1}%' ORDER BY 
     ProductID ASC", Field, Value); 
    return SelectRow(sql); 

} 

public DataTable SelectRow(string Query) 
{ 
    try 
    { 
     return Db.RunQuery(Query); 
    } 
    catch 
    { 
     return new DataTable(); 
    } 

} 
    //This label should show number of all products i.e from 0- any number 
    public int Queue() 
    { 
    int customers; 
    String sql = String.Format("Select Count(*) from Product"); 
    customers = Db.RunQuery(sql).Rows.Count; 
    return customers; 


    } 

} 
+0

이'DataBaseConn' 목적은 무엇인가에 대해 ExecuteScalar는에 간단 할 수 있는가? 행을 계산하기 위해 쿼리를 실행할 수 없습니다. 스칼라 선언문을 실행해야합니다! – rodrigogq

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

답변

0

내가 Db.RunQuery는 DataTable을 반환한다 DataTables의 사용에서 같은데요? 그럴 경우

.Rows.Count 

쿼리가 반환 한 행 수만 허용됩니다. 이 경우 어느 하나의 .. 무엇을 반환하는 것은 참으로 DataTable을되도록 경우이

customers = Convert.ToInt32(dt.Rows[0][0]) 

같은 데이터에 액세스 할 것입니다 그러나 이것은 반환, 단지 RUNQUERY은 기본 채우기를하고있는 가정도 datatable, 그리고 datatable 다른 일을하지.

또한 쿼리 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar%28v=vs.110%29.aspx

//I'm guessing this is something you'd add to your Db class. The ability to ExecuteScalar 
    cmd.CommandText = "Select Count(*) from Product"; 
    customers = (Int32) cmd.ExecuteScalar(); 
+0

내 코드가 어떻게 생깁니 까? Query를 실행해야합니까? –

+0

당신은 왜 결과 대신 숫자 1을 계속 가져 왔는지에 대한 원래의 질문에 관해서. 고객을 바꾸는 경우 = Db.RunQuery (sql) .Rows.Count; 고객 = Convert.ToInt32 (dt.Rows [0] [0]) 올바른 결과를 제공해야합니다. 하지만 ExecuteScalar를 살펴봐야합니다. 쿼리 결과를 얻는 더 좋은 방법이기 때문에 –

+0

내 코드는 작동하지만 새로 고침하지 않고 테이블에서 레코드를 삭제하는 데 지연이 있습니다! 나는 ExcuteScalar를 처음 사용하기 위해 열심히 사용하지 않았다. ( –

관련 문제