数据读取器和DataGridView控件的使用

本文介绍了一种使用C#从数据库读取数据并显示在DataGridView控件中的方法。通过实例展示了如何连接数据库、执行SQL查询并将结果填充到DataGridView中。此外,还提供了过滤功能以根据类别筛选数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;

namespace 数据读取器和DataGridView控件的使用
{
    public partial class Form1 : Form
    {
        private OleDbConnection conn;
        private OleDbCommand cmd;
        private OleDbDataReader reader;
        public class Item
        {
            public int CategoryID { get; set; }
            public string CategoryName { get; set; }
            public Item(int id,string name)
            {
                CategoryName = name;
                CategoryID = id;
            }
            public override string ToString()
            {
                return this.CategoryID.ToString();
            }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb";
            this.conn = new OleDbConnection(connectionString);
            try
            {
                conn.Open();
                cmd = new OleDbCommand();
                cmd.Connection = conn;
                cmd.CommandText = "SELECT 类别ID,类别名称 FROM 类别";
                this.reader = cmd.ExecuteReader();
                ArrayList categories = new ArrayList();
                while (reader.Read())
                    categories.Add(new Item(reader.GetInt32(0), reader.GetString(1)));
                this.comboBoxCategory.DataSource = categories;
                this.comboBoxCategory.DisplayMember = "CategoryName";
                reader.Close();
                this.cmd.CommandText = "SELECT DISTINCTROW 类别.类别名称,产品.产品名称,产品.单位数量,产品.库存量,产品.中止 FROM 类别 INNER JOIN 产品 ON 类别.类别ID=产品.类别ID WHERE(((产品.中止)=No)) ORDER BY 类别.类别名称,产品.产品名称";
                this.reader = this.cmd.ExecuteReader();
                object []data=new object[this.reader.FieldCount];
                if (this.dataGridView1.Columns.Count == 0)
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                        this.dataGridView1.Columns.Add(reader.GetName(i), reader.GetName(i)); //添加字段名称
                }
                this.dataGridView1.Rows.Clear();
                while (reader.Read())           //读取Reader中的行并放入DataGridView
                {
                    reader.GetValues(data);
                    this.dataGridView1.Rows.Add(data);
                }
                reader.Close();
            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void checkBoxIsFiltered_CheckedChanged(object sender, EventArgs e)
        {
            if (!this.checkBoxIsFiltered.Checked)
                this.Form1_Load(sender, e);
            else
            {
                this.cmd.CommandText = "SELECT DISTINCTROW 类别.类别名称,产品.产品名称,产品.单位数量,产品.库存量,产品.中止 FROM 类别 INNER JOIN 产品 ON 类别.类别ID=产品.类别ID WHERE (((产品.中止)=No AND 产品.类别ID=?)) ORDER BY 类别.类别名称,产品.产品名称";
                //设置comboBox控件中的参数,对应于上面一条查询语句
                this.cmd.Parameters.Clear();         //必须加入此句,才会使参数有效
                this.cmd.Parameters.AddWithValue("类别ID", this.comboBoxCategory.SelectedValue.ToString());
                try
                {
                    this.reader = this.cmd.ExecuteReader();
                    object[] data = new object[reader.FieldCount];
                    this.dataGridView1.Rows.Clear();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            reader.GetValues(data);
                            this.dataGridView1.Rows.Add(data);
                        }
                    }
                    reader.Close();
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                
            }
        }

        private void comboBoxCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.checkBoxIsFiltered_CheckedChanged(sender, e);
        }
    }
}

在C# Windows Forms中,DataGridView控件是一个强大的表格控件,用于显示编辑数据集合。要使用DataGridView数据行,你可以按照以下步骤操作: 1. **添加DataGridView到Form**:首先,在Windows Form设计器上拖拽一个DataGridView控件到设计区域。 2. **设置数据源**:设置DataGridView数据源可以是DataTable、List<T>、数据库连接或其他支持IList<T>或ICollectionView的对象。例如,如果你有一个DataTable,可以在属性窗口将"DataSource"属性设置为它。 ```csharp DataTable dataTable = new DataTable(); // 添加列数据... dataGridView.DataSource = dataTable; ``` 3. **处理数据行事件**: DataGridView提供了一系列事件,如CellClick、RowValidated等,你可以通过它们来响应用户的交互。比如,当你想要在用户双击某一行时执行某个操作,可以绑定DoubleClick事件: ```csharp dataGridView.CellDoubleClick += DataGridView_CellDoubleClick; private void DataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { DataGridViewRow row = dataGridView.CurrentRow; // 获取当前选中的行数据并做处理 } ``` 4. **读取修改数据**:通过DataRowView对象访问编辑每一行的数据。例如获取单元格值: ```csharp string value = dataGridView.Rows[rowIndex].Cells["ColumnName"].Value.ToString(); ``` 5. **插入、删除更新行**:你可以通过`Rows.Add()`, `Rows.RemoveAt()`, 或 `Rows[RowIndex].Cells["ColumnName"].Value = newValue;` 来操作行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值