2017-11-11 159 views
0

我有DataGridView有很多數據在裏面和一個搜索文本框。 我的問題是當我篩選datagridview行我想我的小計標籤根據搜索數據進行更改,但我無法做到這一點,因爲我選擇與查詢小計SUM。如何在使用文本框搜索datagridview時在標籤中顯示總和

這是我的小計標籤代碼

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代碼:

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; 

每一件事工作正常,但根據過濾 我想改變我的小計標籤文本,它不改變小計文本根據搜索過濾器怎麼可能?

注:它的工作完全使用計時器,但我不希望使用定時器

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

類似於:列表 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; 

通過現場獲取你的山坳值:如果爲true,您可以使用和聚集在你的T-SQL和DataTable列,像得到它

請注意,如果您使用Sum,您應該選擇顏色爲Group by

2 - 您可以使用單獨的查詢只選擇和山坳,並使用單獨的DataTable

3-之前我沒有測試,但我肯定這樣給你期望的輸出。

+0

讓我先實現這個代碼吧。 – Usama

+0

此代碼不適用於我的情況。 – Usama

相關問題