2017-11-11 1 views
0

DataGridView에 데이터가 많이 있고 검색 텍스트 상자가 있습니다. 내 문제는 내가 datagridview 행을 필터링 할 때 검색 데이터에 따라 소계 레이블을 변경하려고하지만 쿼리로 소계 SUM을 선택하기 때문에 수행 할 수 없습니다.텍스트 상자를 사용하여 datagridview를 검색하는 동안 레이블에 합계를 표시하는 방법

SqlConnection con = new SqlConnection(str); 
con.Open(); 
SqlDataAdapter sda = new SqlDataAdapter("Select Invoice_no,Date_of_Sale,Customer_Name,Contact,Item_Code,Item_Name,Quantity,Selling_Price,Discount,Paid_Amount,Remaining,Sub_Total,Total From Sales_Order Order By Invoice_no", con); 
DataTable dt = new DataTable(); 
sda.Fill(dt); 
dgv.DataSource = dt; 

DataView dv = new DataView(dt); 
dv.RowFilter = string.Format("Item_Name LIKE '{0}%' ", Search_By_ItemName.Text); 
dgv.DataSource = dv; 

모든 일이 잘 작동하지만 변화하지 소계 텍스트 내 소계 레이블 텍스트를 변경하려면 필터에있어서, 여기

내 소계 라벨 코드

SqlConnection con = new SqlConnection(str); 
con.Open(); 
string query = "SELECT SUM(Sub_Total) from (SELECT distinct Sub_Total FROM Sales_Order) as Sales_Order"; 
    using (SqlCommand command = new SqlCommand(query, con)) 
{ 
    object result = command.ExecuteScalar(); 
    Sub_Tot.Text = Convert.ToString(result); ; 
} 
con.Close(); 

텍스트 상자의 TextChanged 코드 검색 필터에 따라 어떻게 가능합니까?

참고 :이 타이머를 사용하여 완벽하게 작동하고하지만 난 타이머를 사용하지 않으

int sum = 0; 
for (int i = 0; i < Sale_Order_Grid.Rows.Count; i++) 
{ 
    sum += Convert.ToInt32(Sale_Order_Grid.Rows[i].Cells[8].Value); 
} 
this.lbl_SubTotal.Text = sum.ToString(); 
+0

대신 DataTable을 통해 검색하십시오. – jdweng

+0

@jdweng 어떤 코드예요? – Usama

+0

다음과 같이 List searchRows = dt.AsEnumerable(). 여기서 x => x.Field ("Customer_Name") == Search_By_ItemName.Text) .ToList(); int sum = searchRows.AsEnumerable(). Sum (x => x.Field ("Paid_Amount")); – jdweng

답변

0

아하, 내가 제대로 이해하면 검색 쿼리 그리드를 통해 반복되지 따라 subtotal 라벨을 입력 할 경우 그 열을 하나씩 합치시겠습니까? 예?

var totlaCol= dt.Columns.Cast<DataColumn>().SingleOrDefault(col => col.ColumnName == "SubTotal"); 
if (totalCol!= null) 
{ 
    var tableRows = dt.AsEnumerable().First(); 
    var sumVal= tableRows.Field<string>(totlaCol); 
    // or 
    //sumVal = tableRows.Field<string>(dt.Columns.IndexOf(myColumn)); 
} 

1 :

SqlConnection con = new SqlConnection(str); 
con.Open(); 
SqlDataAdapter sda = new SqlDataAdapter("Select Invoice_no,Date_of_Sale,Customer_Name,Contact,Item_Code,Item_Name,Quantity,Selling_Price,Discount,Paid_Amount,Remaining,Sub_Total,Total,SUM(Sub_Total) as SubTotal From Sales_Order Group by Invoice_no,Date_of_Sale,Customer_Name,Contact,Item_Code,Item_Name,Quantity,Selling_Price,Discount,Paid_Amount,Remaining,Sub_Total,Total Order By Invoice_no", con); 
DataTable dt = new DataTable(); 
sda.Fill(dt); 
dgv.DataSource = dt; 

DataView dv = new DataView(dt); 
dv.RowFilter = string.Format("Item_Name LIKE '{0}%' ", Search_By_ItemName.Text); 
dgv.DataSource = dv; 

필드의 이름으로 안부 값을 받고 : 당신이 당신의 T-SQL에서 합계 집계를 사용하고 DataTable 열, 같은에서 그것을 얻을 수있는 경우는 true

참고 Sum을 사용하는 경우 선택한 열 Group by을 사용해야합니다.

2 - 당신은 별도의 질의 단지 선택 합계 (COL)를 사용하고

3 별도의 DataTable 내가 전에 그것을 테스트하지 않은 사용하지만 나는 확실히이 방법은 당신에게 당신의 예상 출력을 제공 할 수 있습니다.

+0

이 코드를 먼저 구현해 보겠습니다. – Usama

+0

내 경우에는이 코드가 작동하지 않습니다. – Usama

관련 문제