Выберите некоторые записи из базы данных и отобразите в сетке данных через c # с базой данных sqlite. - PullRequest
1 голос
/ 14 июля 2011

У меня есть пример базы данных, как показано ниже, и я хочу отображать только красные записи в сетке данных. У меня есть условие, как сделать эти две клетки красными.

Пример базы данных

enter image description here

Например, я хочу отобразить записи, значение которых меньше 10 в столбце номера книги.

Я использовал код как показано ниже, чтобы сделать их красными.

код

private void UpdateDataGridViewColor()
{
    if (calledMethod == 2)
    {
        for (int i = 0; i < dataGridView1.RowCount; i++)
        {
            int j = 6;
            DataGridViewCellStyle CellStyle = new DataGridViewCellStyle();
            CellStyle.ForeColor = Color.Red;

            if (isLate(dataGridView1[j, i].Value.ToString()))
            {
                dataGridView1[j, i].Style = CellStyle;
            }
        }
    }
}

Я использовал код, похожий на следующий.

код

private void issueDetails()
{
    calledMethod = 2;
    string connectionPath = @"Data Source=Data\libraryData.dat;Version=3;New=False;Compress=True";

    using (SQLiteConnection connection = new SQLiteConnection(connectionPath))
    {
        SQLiteCommand command = connection.CreateCommand();
        connection.Open();
        string query = "SELECT bookno as 'Book No.',studentId as 'Student ID',  title as 'Title', author as 'Author', description as 'Description', issuedDate as 'Issued Date', dueDate as 'Due Date' FROM issuedBooks";
        command.CommandText = query;
        command.ExecuteNonQuery();

        SQLiteDataAdapter da = new SQLiteDataAdapter(command);
        DataSet ds = new DataSet();
        da.Fill(ds, "issuedBooks");
        int c = ds.Tables["issuedBooks"].Rows.Count;
        dataGridView1.DataSource = ds.Tables["issuedBooks"];
        dataGridView1.Sort(dataGridView1.Columns["Student ID"], ListSortDirection.Ascending);
        dataGridView1.ReadOnly = true;
        connection.Close();
        this.Totals.Text = "Total Issued Books : " + Convert.ToString(c);
    }
}

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Ответ

public void onlyDueReport()
    {
        List<int> array = new List<int>();
        string connectionPath = @"Data Source=Data\libraryData.dat;Version=3;New=False;Compress=True";
        using (SQLiteConnection connection = new SQLiteConnection(connectionPath))
        {
            SQLiteCommand command = connection.CreateCommand();
            connection.Open();
            string query = "SELECT bookno as 'Book No.',studentId as 'Student ID',  title as 'Title', author as 'Author', description as 'Description', issuedDate as 'Issued Date', dueDate as 'Due Date' FROM issuedBooks";
            command.CommandText = query;
            command.ExecuteNonQuery();
            SQLiteDataAdapter da = new SQLiteDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds, "issuedBooks");
            int c = ds.Tables["issuedBooks"].Rows.Count;
            if (c > 0)
            {
                for (int row = c; row > 0; row--)
                {
                    string date = (string)(ds.Tables["issuedBooks"].Rows[c - row]["Due Date"]);
                    if (isLate(date))
                    {
                        int a = Convert.ToInt32(ds.Tables["issuedBooks"].Rows[c - row]["Book No."]);
                        array.Add(a);
                    }
                }
            }

            query = "SELECT bookno as 'Book No.',studentId as 'Student ID',  title as 'Title', author as 'Author', description as 'Description', issuedDate as 'Issued Date', dueDate as 'Due Date' FROM issuedBooks WHERE bookno IN (";
            int[] cool = array.ToArray();
            int cou = 0;
            foreach (int a in cool)
            {
                query += a;
                if (cou < cool.Length - 1) { query += ','; }
                cou++;
            }
            query += ")";

            Console.WriteLine(query);
            command.CommandText = query;
            command.ExecuteNonQuery();
            DataSet ds1 = new DataSet();
            da.Fill(ds1, "issuedBooks");
            dataGridView1.DataSource = ds1.Tables["issuedBooks"];
            this.Totals.Text = "";
            Report_Viewer.StatusPText = " Total Pending Books :  " + ds1.Tables["issuedBooks"].Rows.Count; 
        }

    }
1 голос
/ 14 июля 2011

Вы пробовали,

foreach(DataGridView row in dataGridView1.Rows)
{
     //check whether bookno. column in 'row' is less than 10
     //and do something
}

Я только что прочитал ваш комментарий о том, что вы хотите запросить из базы данных напрямую перед тем, как отобразится в datagridview, это то, что вы хотите?

Для баз данных SQLite проверьте эту ссылку , вы можете использовать стандартные операторы выбора SQL для получения записей, основанных на вашем условии.Пример SELECT * From <table> Where bookNum > 10

Это должно дать вам все записи с bookNum больше 10.

Сначала создайте соединение,

SQLiteConnection connection = new SQLiteConnection(connectionPath)

Затем адаптер данных

 SQLiteDataAdapter da = new SQLiteDataAdapter(query, connection);

Сделайте ваши таблицы сопоставлений, если таковые имеются.А затем позвоните da.Fill(ds, "issuedBooks");

Я также заметил, что вы использовали As в вашем sql-запросе для имен столбцов.Вы можете использовать сопоставления таблиц для сопоставления имени столбца базы данных с именем столбца с данными.Смотрите эту ссылку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...