簡體   English   中英

C#datagridview過濾器中的錯誤特定內容

[英]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_Clickadapter.Fill(dataset);之后添加此行adapter.Fill(dataset);

adapter.Fill(dataset, "ItemRecord");
dataGridView1.DataSource = dataset.Tables["ItemRecord"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM