using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Student
{
    public partial class GrdQry : Form
    {
        public GrdQry()
        {
            InitializeComponent();
        }
        private string Qrystrconn;
        private string Qryconnstr = "Data Source=WWW-F9EEA54BDCA;Initial Catalog=STUDENT;User ID=sa;Pwd=jxlsqd;Integrated Security=False";
        private SqlConnection Qrysqlconn;
        private SqlDataAdapter Qrysqlda;
        private SqlCommandBuilder Qrysqlcomm;
        private DataSet Qrymakset = new DataSet();        private void 成绩查询_Load(object sender, EventArgs e)
        {
            DataSet UpdStudClassset = new DataSet();
            Qrystrconn = " select COURSE from MARK";
            Qrysqlconn = new SqlConnection(Qryconnstr);
            Qrysqlda = new SqlDataAdapter(Qrystrconn, Qrysqlconn);
            UpdStudClassset.Clear();            Qrysqlda.Fill(UpdStudClassset, "MARK");
            for (int i = 0; i < UpdStudClassset.Tables[0].Rows.Count; i++)
            {
                Makcls.Items.Add(UpdStudClassset.Tables[0].Rows[i][0]);
            }
            Makcls.SelectedIndex = 0;
        }
        private void button4_Click(object sender, EventArgs e)
        {
            int row = this.Datgr.CurrentCell.RowNumber;
            this.Datgr.CurrentCell = new DataGridCell(row + 1, 0);
            if (Qrymakset.HasChanges())
            {
                Qrysqlconn = new SqlConnection(Qryconnstr);
                Qrysqlda = new SqlDataAdapter(this.Qrystrconn, this.Qrysqlconn);
                Qrysqlcomm = new SqlCommandBuilder(Qrysqlda);
 //               this.Update(Qrymakset.GetChanges(), "MARK");
                MessageBox.Show("修改成功!");
            }
        }        private void button5_Click(object sender, EventArgs e)
        {
            int rowNumber = this.Datgr.CurrentCell.RowNumber;
            this.Qrymakset.Tables["MARK"].Rows[rowNumber].Delete();
            Qrysqlconn = new SqlConnection(Qryconnstr);
            Qrysqlda = new SqlDataAdapter("", this.Qrysqlconn);
            Qrysqlcomm = new SqlCommandBuilder(Qrysqlda);
            Qrysqlda.Update(this.Qrymakset.GetChanges(), "MARK");
            MessageBox.Show("删除成功!");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //try
            //{
            Qrystrconn = "select * from MARK where NAME =" + "'" + this.Maknam.Text.ToString().Trim() + "'";
            Qrysqlconn = new SqlConnection(Qryconnstr);
            Qrysqlda = new SqlDataAdapter(Qrystrconn, Qrysqlconn);
            Qrymakset.Clear();            Qrysqlda.Fill(Qrymakset, "MARK");
            Datgr.DataSource = Qrymakset.Tables[0];
            //}
            //catch
            //{
            //    MessageBox.Show("信息检索失败");
            // }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            DataSet Qrymakset = new DataSet();
            Qrystrconn = "select * from MARK where COURSE =" + "'" + this.Makcls.Text.ToString().Trim() + "'";
            Qrysqlconn = new SqlConnection(Qryconnstr);
            Qrysqlda = new SqlDataAdapter(Qrystrconn, Qrysqlconn);
            Qrymakset.Clear();            Qrysqlda.Fill(Qrymakset, "MARK");
            Datgr.DataSource = Qrymakset.Tables[0];
        }          能运行 但点删除的时候会提示:未将对象引用设置到对象的实例。 未处理NullReferenceException! 各位帮忙看看啊

解决方案 »

  1.   

    this.Qrymakset.Tables["MARK"].Rows[rowNumber].Delete(); 这是删除的。Qrysqlda.Update(this.Qrymakset.GetChanges(), "MARK");  这里为什么要更新?重新绑定就可以得到新的数据了。
      

  2.   

     我是新手 找着书上敲的代码 这行的意思就是你在datagrid 里面删除数据后然后再更新数据库啊! 要不下次启动窗口上次删除的数据还在吧!不知道是不是这样。 那怎么该下就可以更新删除后的数据表了? 谢谢!
      

  3.   

    this.Qrymakset.GetChanges(), 返回的是个什么东西啊!
    然后   Qrysqlda.Update(, ); 面的2个参数对比下!你看看问题是出在这里吗?
      

  4.   

    直接在数据库里删除数据然后再重新绑定就行。DataSet不用管。
      

  5.   

    Qrysqlda.Update(this.Qrymakset.GetChanges(), "MARK");  把GetChanges()去掉试下,如果不行,就直接用SQL语句把数据删除 ,这样效率更高!