[英]error in C# datagridview filter specific content
當我選擇那個日期時,我正試圖顯示有關日期的記錄。 我已經填充了我的datagridview:
con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"C:\\Users\\Fakhar Zaman\\documents\\visual studio2010\\Projects\\LabManagement\\LabManagement\\Management.mdf\";Integrated Security=True;User Instance=True");
con.Open();
SqlDataAdapter adap = new SqlDataAdapter("select id, expenseTitle, expenseAmount, date, paidBy, expenseType from Expense", con);
DataSet ds = new System.Data.DataSet();
adap.Fill(ds, "Expense");
dataGridView2.DataSource = ds.Tables[0];
adap = new SqlDataAdapter("select id, date, itemName, quantity, itemSold, priceBuy, soldPrice, totalSold, profit from ItemRecord", con);
ds = new System.Data.DataSet();
adap.Fill(ds, "ItemRecord");
dataGridView1.DataSource = ds.Tables[0];
此代碼工作正常並顯示datagridview中的值。 但是,當我想過濾特定日期的內容時,它不會這樣做,而是再次顯示完整的記錄。 過濾代碼如下:
string plus = dateTimePicker1.Value.AddDays(1).ToString("yyyy-MM-dd");
string date = dateTimePicker1.Value.ToString("yyyy-MM-dd");
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand("SELECT * FROM ItemRecord", con);
var dataset = new DataSet();
adapter.Fill(dataset);
//MessageBox.Show(plus +" , " + date);
this.itemRecordBindingSource.Filter = string.Format("date >= '{0:yyyy-MM-dd}' AND date < '{1:yyyy-MM-dd}'", date, plus);
//string date = dateTimePicker1.Value.ToString();
請給我一些解決方案。
每當我使用自動生成的代碼填充數據集時,它工作正常並過濾特定內容,但我需要上面的代碼才能正常工作
this.expenseTableAdapter.Fill(this.managementDataSet21.Expense); this.itemRecordTableAdapter.Fill(this.managementDataSet21.ItemRecord);*/
以下是表單的完整代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace LabManagement
{
public partial class calculation : Form
{
SqlConnection con;
public calculation()
{
InitializeComponent();
}
private void calculation_Load(object sender, EventArgs e)
{
con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"C:\\Users\\Fakhar Zaman\\documents\\visual studio 2010\\Projects\\LabManagement\\LabManagement\\Management.mdf\";Integrated Security=True;User Instance=True");
con.Open();
SqlDataAdapter adap = new SqlDataAdapter("select id, expenseTitle, expenseAmount, date, paidBy, expenseType from Expense", con);
DataSet ds = new System.Data.DataSet();
adap.Fill(ds, "Expense");
dataGridView2.DataSource = ds.Tables[0];
adap = new SqlDataAdapter("select id, date, itemName, quantity, itemSold, priceBuy, soldPrice, totalSold, profit from ItemRecord", con);
ds = new System.Data.DataSet();
adap.Fill(ds, "ItemRecord");
dataGridView1.DataSource = ds.Tables[0];
/*
// TODO: This line of code loads data into the 'managementDataSet21.Expense' table. You can move, or remove it, as needed.
this.expenseTableAdapter.Fill(this.managementDataSet21.Expense);
// TODO: This line of code loads data into the 'managementDataSet21.ItemRecord' table. You can move, or remove it, as needed.
this.itemRecordTableAdapter.Fill(this.managementDataSet21.ItemRecord);*/
dateTimePicker1.MaxDate = DateTime.Today;
}
private void button1_Click(object sender, EventArgs e)
{
// this.itemRecordBindingSource.Filter = "date = '" + dateTimePicker1.Value.ToString() + "'";
string plus = dateTimePicker1.Value.AddDays(1).ToString("yyyy-MM-dd");
string date = dateTimePicker1.Value.ToString("yyyy-MM-dd");
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand("SELECT * FROM ItemRecord Where date >='" + dateTimePicker1.Value.AddDays(1).ToString("yyyy-MM-dd") + "' AND date < '" + date + "'", con);
//adapter.SelectCommand = new SqlCommand("SELECT * FROM ItemRecord", con);
adapter.SelectCommand.BeginExecuteNonQuery();
var dataset = new DataSet();
adapter.Fill(dataset);
//MessageBox.Show(plus +" , " + date);
//this.itemRecordBindingSource.Filter = string.Format("date >= '{0:yyyy-MM-dd}' AND date < '{1:yyyy-MM-dd}'", date, plus);
/*string date = dateTimePicker1.Value.ToString();
*/
int sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count; ++i)
{
sum += int.Parse(dataGridView1.Rows[i].Cells[8].Value.ToString());
}
label2.Text = sum.ToString();
///// for expense table:
SqlDataAdapter myadapter = new SqlDataAdapter();
myadapter.SelectCommand = new SqlCommand("SELECT * FROM Expense Where date >='" + dateTimePicker1.Value.AddDays(1).ToString("yyyy-MM-dd") + "' AND date < '" + date + "'", con);
//myadapter.SelectCommand = new SqlCommand("SELECT * FROM Expense", con);
var expensedataset = new DataSet();
myadapter.Fill(expensedataset);
//MessageBox.Show(plus +" , " + date);
//this.expenseBindingSource.Filter = string.Format("date >= '{0:yyyy-MM-dd}' AND date < '{1:yyyy-MM-dd}'", date, plus);
/*string date = dateTimePicker1.Value.ToString();
*/
sum = 0;
for (int i = 0; i < dataGridView2.Rows.Count; ++i)
{
sum += int.Parse(dataGridView2.Rows[i].Cells[2].Value.ToString());
}
label3.Text = sum.ToString();
int overall = int.Parse(label2.Text) - int.Parse(label3.Text);
label5.Text = "Overall profit for date " + dateTimePicker1.Value.ToString("dd-MM-yyyy") +" = Rs." + overall.ToString() ;
/*string namequery = "SELECT itemName from ItemRecord where date = '" + date +"'";
string itemname;
using (var command = new SqlCommand(namequery, con))
{
command.Parameters.AddWithValue("@Parameter", 5);
con.Open();
itemname = (string)command.ExecuteScalar();
con.Close();
}
*/
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
private void label6_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
this.Hide();
Form1 frm = new Form1();
frm.ShowDialog();
this.Close();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
}
}
當您再次呼叫DB時,為什么不選擇那些滿足您的日期檢查的記錄。 看一下修改后的select命令。
SqlCommand sqlcmd = new SqlCommand("SELECT * FROM ItemRecord Where date >='"+dateTimePicker1.Value.AddDays(1).ToString("yyyy-MM-dd")+"' AND date < '"+date+"'" , con);
SqlDataAdapter adapter = new SqlDataAdapter(sqlcmd);
adapter.Fill(yourDataSource);
希望能幫助到你。 如果你想要別的東西,請記下來。
我不確定是否有必要在代碼顯示時過濾數據。 您可以簡單地將行過濾器應用於當前的DataTable
,而不是從原始數據庫中過濾/選擇。 假設您要過濾數據以顯示兩個日期之間的所有日期。 使用兩個文本框,用戶在一個文本框中鍵入第一個開始日期,然后在第二個文本框中鍵入結束的第二個日期。 用戶單擊“過濾器”按鈕以過濾DataTable
,僅顯示這兩個日期之間的日期。 如果用戶清除文本框並單擊過濾器按鈕,則將顯示原始未過濾的數據。 希望這可以幫助。
DataTable dt;
public Form1() {
InitializeComponent();
dt = GetYourDataTable();
dataGridView1.DataSource = dt;
}
private void buttonFilter_Click(object sender, EventArgs e) {
if (tbDate1.Text == "" || tbDate2.Text == "") {
dt.DefaultView.RowFilter = "";
}
else {
DateTime sDate;
DateTime eDate;
if ((DateTime.TryParse(tbDate1.Text, out sDate)) && (DateTime.TryParse(tbDate2.Text, out eDate))) {
dt.DefaultView.RowFilter = string.Format("Date >= #" + sDate + "# AND Date <= #" + eDate + "#");
}
}
}
在Button1_Click
在adapter.Fill(dataset);
之后添加此行adapter.Fill(dataset);
線
adapter.Fill(dataset, "ItemRecord");
dataGridView1.DataSource = dataset.Tables["ItemRecord"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.