设计了一个页面,有datagridview。
点击其中一行,该行数据反映在窗口中的textbox中。
上面说的都实现了!
但是如何删除?
看了书上都说要加上“where”什么什么的语句匹配条件删除行。
但我设计的数据表中允许有重复的数据的!比如同一税种,金额也一样。一删就都删除了!
只有自动给编号的“ID”字段不一样。
请问如何处理?

解决方案 »

  1.   

    删除的时候执行:Delete From [表名] Where [ID] = ...
    [ID]就是那个自动编号的字段,后面是要删除行的[ID]字段值。
      

  2.   

    补充协一下:
    你绑定DataGridView的时候把ID列隐藏掉,这样比较美观一点
      

  3.   

    这个是知道ID的时候啊!
    我想是在datagridview中点击选择某一行。
    不知道ID值,要从表中取得1
    不知道自动编号的数据类型是什么,我用where id = Convert.ToInt32( dgvmain[0, dgvmain.CurrentCell.RowIndex].Value)
    取值,总是说数据类型不对!
      

  4.   

    你试一下 Convert.ToInt64  你的自动编号 有可能是Long类型?
      

  5.   

    int.pase(dgvmain.CurrentRow.cell[0].Value.Tostring().Trim());
      

  6.   

    楼主是想删除鼠标所指的当前行吗?看楼主是怎样绑定数据的了。建议楼主使用BindingSource为桥绑定DataSet或DataTable到DataGridView上。那删除很好实现,使用BindingSource操作就可以。
      

  7.   


    能否说的详细一点?对你说的BindingSource为桥不懂~!
    我就是按书上说的用dataset当做数据源
      

  8.   


    dataset.Tables["绑定数据时的表名"].Rows[dgvInfos.SelectedRows[0].Index].Delete();
      

  9.   


    其实就是取选中行的id值,按id进行删改
      

  10.   


    系统提示:错误 1 “int”并不包含“parse”的定义 D:\gkshjd\gkshjd\gkshjd\frm_pzluru.cs 272 76 gkshjd
      

  11.   

    唉!!!试了很多,都说类型不匹配,不知道这个id值到底是各啥类型!
    我把全部代码贴出来,大伙帮我看看啊!
    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.OleDb;namespace gkshjd
    {
        public partial class frm_pzluru : Form
        {        gkshjd.BaseClass.BaseOperate boperate = new gkshjd.BaseClass.BaseOperate();
            gkshjd.BaseClass.OperateAndValidate opAndvalidate = new gkshjd.BaseClass.OperateAndValidate();
            protected string myolestr = "select id as 序号,kemucode as 科目代码,kemuname as 科目名称,jiefang as 借方金额,daifang as 贷方金额,jdren as 监督人 from tb_main";
            protected string mystrtb = "tb_main";
            protected int ismodi;
           
            public frm_pzluru()
            {
                InitializeComponent();
            }        private void frm_pzluru_Load(object sender, EventArgs e)
            {
                txt_kmcode.Text = "";
                txt_kmname.Text = "";
                txt_jf.Text = "";
                txt_df.Text = "";
                txt_kmcode.Focus();
                DataSet myds = boperate.getds(myolestr, mystrtb);
                dgvmain.DataSource = myds.Tables[0];
                this.dgvmain.Columns[0].FillWeight = 5;
               this.dgvmain.Columns[1].FillWeight = 15;
                this.dgvmain.Columns[2].FillWeight = 30;
                this.dgvmain.Columns[3].FillWeight = 20;
                this.dgvmain.Columns[4].FillWeight = 20;
                this.dgvmain.Columns[5].FillWeight = 10;
            }        private void dgvmain_CellFormatting_1(object sender,DataGridViewCellFormattingEventArgs e)
            {
                DataGridViewCellStyle cs1 = new DataGridViewCellStyle();
                cs1.Format = "N2";
                cs1.Alignment = DataGridViewContentAlignment.MiddleRight; 
                this.dgvmain.Columns[4].DefaultCellStyle = cs1;
                this.dgvmain.Columns[3].DefaultCellStyle = cs1;           }
            private void dgvmain_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                txt_kmcode.Text = Convert.ToString(dgvmain[1, dgvmain.CurrentCell.RowIndex].Value).Trim();
                txt_kmname.Text = Convert.ToString(dgvmain[2, dgvmain.CurrentCell.RowIndex].Value).Trim();
                txt_jf.Text = Convert.ToString(dgvmain[3, dgvmain.CurrentCell.RowIndex].Value).Trim();
                txt_df.Text = Convert.ToString(dgvmain[4, dgvmain.CurrentCell.RowIndex].Value).Trim();
                btnmodi.Enabled = true;
                btndele.Enabled = true;
                btntop.Enabled = true;
                btnlast.Enabled = true;
                btnnext.Enabled = true;
                btnend.Enabled = true;
                btnsave.Enabled = false;
            }
            private void btndele_Click(object sender, EventArgs e)
            {
                try
                {
                    if (MessageBox.Show("确定要删除该条信息吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                       // myds.Tables[0].Rows[dgvmain.SelectedRows[0].Index].Delete();
                        boperate.getcom("delete from tb_main where id='" + Convert.ToString(dgvmain[0, dgvmain.CurrentCell.RowIndex].Value) + "'");
                        frm_pzluru_Load(sender, e);
                        MessageBox.Show("删除数据成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                   
               //  Convert.ToInt32(   
                    
                    }
                }
                catch (Exception ex)            {
                    MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                }
            }                  }
    }
      

  12.   

    应该是这样吧,int.Parse(dgvmain.CurrentRow.cell["列名"].Value.Tostring());
      

  13.   

    用bindingSource的话,设置bindingSource的数据源
    MyBindSource.DataSource = MyDtTable;//或是DataView
    移除当前行:
    bsSource.RemoveAt(MyBindSource.Position)
      

  14.   

    var id=int.Parse((dgvmain.CurrentRow.DataItem as DataRowView)["序号"]);
      

  15.   

    我记得我以前做的直接就是
    where id=dataGridView1[0,dataGridView1.CurrentCell.RowIndex].Value.ToString();楼主可以试一下
      

  16.   


    从你的某行肯定能取到IDDelete From [表名] Where [ID] = 你所选中行的ID这样去执行就行了
      

  17.   

    ID字段是ACCESS 自动编号的长整型。
    试过了上述where id=。。多条语句,取出来的值都是字符串,提示数据类型不匹配!
    比如我选择的是第2号记录,
    允许程序的结果都是"id='2'",提示不匹配!!!!
      

  18.   

    不好意思没注意站内信。这样改一下 int ID= int.Parse(dgvmain[0, dgvmain.CurrentCell.RowIndex].Value.ToString());
     string idsql = string.Format("delete from tb_main where id={0}", ID);
     boperate.getcom(idsql);
     我觉得你应该在CellClick去取ID
     int id = int.Parse(this.dgvmain.Rows[e.RowIndex].Cells["id"].Value.ToString());