C#在windowsform的datagridview表格里面添加一列删除按钮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#在windowsform的datagridview表格里面添加一列删除按钮相关的知识,希望对你有一定的参考价值。

点击这个删除按钮就可以删除datagridview里面的与按钮同一行的信息,这个信息也是真的从数据库里面删除了,而不是只在dataset里面删除。
如果有会的大侠,请把您的代码尽可能详细的告诉我。
最好是一步步的道来,谢谢啦。辛苦各位大侠了。

表结构
userid username
1 aaa
2 bbb
详细看步聚
1 拖个datagridview到窗体上。
2 把这两列绑到datagridview上
3 给这个datagridview添加个DataGridViewButtonColumn按钮列 列名叫ColumnDelete
4 添加datagridview的CellContentClick(单元格单击事件)
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
if (e.ColumnIndex == this.dataGridView1.Columns["ColumnDelete"].Index) //判断列索引是不是删除按钮
int rows = dataGridView1.CurrentRow.Index; //得到当前行的索引
string id = dataGridView1.Rows[rows].Cells[0].Value.ToString(); //得到表的主键ID,就是上表中的userid
if (id != null && id != "" && MessageBox.Show("您确定要删除吗?", "重要提示!", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == System.Windows.Forms.DialogResult.OK)
new BLL.sys_user().Delete(Convert.ToInt32(id)); //执行删除方法
bindUserList(null,null); //重新绑定数据(刷新列表)

追问

貌似快要成功了,只是BLL和bindUserList是什么东西,会报错的!
辛苦你了!!

追答

1 new BLL.sys_user().Delete(Convert.ToInt32(id)); //执行删除方法
2 bindUserList(null,null); //重新绑定数据(刷新列表)

1 是执行删除此条数据的动作。是从数据库中删除此条记录。你可以替换成你删除此条用户记录的方法
2 binduserlist这是重新加载绑定用户列表的数据的方法。 是重新把最新的数据绑定到datagridview上。显示出来你也要替换成你自己的方法。

或者你可以先把这两句注释了。再运行看一下效果。

参考技术A 你应该使用数据集的更新
首先拖一个按钮,注册一个点击事件
然后在事件方法里面将选中行删除掉:如DataRow drChoose = ...;drChoose.Delete();
然后更新:比如:DataTable dt = ..; dt.Update();
当然你需要参考DataAdapter更新数据集的相关资料,其实挺简单的
百度吧!

我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?

【中文标题】我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?【英文标题】:My WindowsForm just ignore some code lines and I don't know why?我的 WindowsForm 只是忽略了一些代码行,我不知道为什么? 【发布时间】:2021-01-21 13:21:54 【问题描述】:

我一直在用 C# 编写一个关于 VS 的软件。这是我其他人制作的旧程序,但我认为我的问题出在我的代码中。在这个软件中,有两个Form,第一个获取一些数据,第二个进行操作并提供我使用的数据的报告。

double sum = 0;

for (int k = 0; k <= length - 1; )

    sum += Convert.ToDouble(pisteA[k]);
                       
    k += 1;


double average = sum / 3;

我有一个包含第二种形式的文本和空值的数组。我只想对这个数组进行平均,所以使用 for 循环,我做了我必须做的事情。但是,当我启动我的软件时,它不会通过行代码并停在这一行。

sum += Convert.ToDouble(pisteA[k]);

当我使用断点查看发生了什么时,代码会经过这一行,然后转到我的其他表单执行:

formImpression.Show();

为了测试一些东西,我在 sum 行之后和之前添加了一个 MessageBox.Show,似乎软执行了问题行上方的代码,但不是在这之后的代码。

我真的不知道发生了什么。

编辑:为了对我使用的代码有更多的理解,我把它留在这里。

String[] varGen =  formulaire.Form1.varG.piste1, formulaire.Form1.varG.piste2, formulaire.Form1.varG.piste3, formulaire.Form1.varG.piste4, formulaire.Form1.varG.modulesPiste1, formulaire.Form1.varG.modulesPiste2, formulaire.Form1.varG.modulesPiste3, formulaire.Form1.varG.modulesPiste4 ;
        TextBox[] pisteA =  mesure1, mesure2, mesure3, mesure4, mesure5, mesure6, moyenne1 ;
        TextBox[] pisteB =  mesure7, mesure8, mesure9, mesure10, mesure11, mesure12, moyenne2 ;
        TextBox[] pisteC =  mesure13, mesure14, mesure15, mesure16, mesure17, mesure18, moyenne3 ;
        TextBox[] pisteD =  mesure19, mesure20, mesure21, mesure22, mesure23, mesure24, moyenne4 ;
        double moyenne = 0;
        int indexMesures = 0;
        bool presencepn = false;

        for (int n = 0; n < dataGridView1.Rows.Count; n++)
        
            if (formulaire.Form1.varG.pn == dataGridView1.Rows[n].Cells[0].Value.ToString() & formulaire.Form1.varG.pn != null)
            
                presencepn = true;

                //Initialisation
                object module_A1 = dataGridView1.Rows[n].Cells[1].Value;
                object module_A2 = dataGridView1.Rows[n + 1].Cells[1].Value;
                object module_A3 = dataGridView1.Rows[n + 2].Cells[1].Value;
                object module_D1 = dataGridView1.Rows[n].Cells[2].Value;
                object module_D2 = dataGridView1.Rows[n + 1].Cells[2].Value;
                object module_D3 = dataGridView1.Rows[n + 2].Cells[2].Value;

                int moduleA1 = int.Parse(module_A1.ToString())-1;
                int moduleA2 = int.Parse(module_A2.ToString())-1;
                int moduleA3 = int.Parse(module_A3.ToString())-1;
                int moduleD1 = int.Parse(module_D1.ToString())-1;
                int moduleD2 = int.Parse(module_D2.ToString())-1;
                int moduleD3 = int.Parse(module_D3.ToString())-1;

                //Remplissage tableau sans exclusion
                // Piste [1,2,3,4]
                for (int j = 0; j < formulaire.Form1.varG.nbPistes; j++)
                

                    // Initialisation de la moyenne
                    moyenne = 0;


                    // Valeur pour la piste J
                    for (int i = 0; i < Convert.ToInt32(varGen[j + 4]); i++)
                    

                        // Calcul de la moyenne
                        moyenne = moyenne + mesures[indexMesures];


                        // Choix de la piste
                        if (varGen[j] == "A")
                        
                            pisteA[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            
                        
                        else if (varGen[j] == "B")
                        
                            pisteB[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            pisteB[6].Text = Math.Round((moyenne / Convert.ToDouble(varGen[j + 4])), 3).ToString(); // Remplissage de la case moyenne
                        
                        else if (varGen[j] == "C")
                        
                            pisteC[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            pisteC[6].Text = Math.Round((moyenne / Convert.ToDouble(varGen[j + 4])), 3).ToString(); // Remplissage de la case moyenne
                        
                        else if (varGen[j] == "D")
                        
                            pisteD[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            pisteD[6].Text = Math.Round(moyenne / Convert.ToDouble(varGen[j + 4]), 3).ToString(); // Remplissage de la case moyenne
                        
                        // Incrémentation de l'index des mesures
                        indexMesures += 1;
                    
                

                int length = pisteA.Length - 1;


                //Suppression des modules exclus
                for (int k = 0; k <= length; k++)
                
                    if (k == (moduleA1) | k == (moduleA2) | k == (moduleA3))
                    
                        pisteA[k].Text = null;
                    
                

                for (int k = 0; k <= length; k++)
                
                    if (k == (moduleD1) | k == (moduleD2) | k == (moduleD3))
                    
                        pisteD[k].Text = null;
                    
                
                double sum = 0;
                for (int k = 0; k <= length - 1; )
                
                    sum += Convert.ToDouble(pisteA[k]);
                    k += 1;
                
                double moyA = sum / 3;
                pisteA[6].Text = Math.Round(moyA).ToString();
            

【问题讨论】:

尝试检查 Windows 偶数日志。 它说我的代码没有任何问题。 也许它抛出了一个异常。是否有 try/catch 块? 不在这部分代码中。你想让我发布我所有的代码吗?也许它会帮助你了解发生了什么。 【参考方案1】:

您是否检查了此设置以查看异常情况?

【讨论】:

我真的不知道如何访问你给我看的窗口,我使用的是 VS 2010,所以它已经很老了.. 尝试菜单Debug -> Windows -> Exception Settings,可能是VS 2010中的相同路径 自从你给我看那个窗口后,我已经搜索过了,但不幸的是,我似乎找不到它。 所以在 VS 2010 中,它有点不同:菜单 Debug + Exceptions 并检查“Common Language Runtime Exceptions”行的“Thrown”和“User-unhandled”。看最后一个答案link 谢谢你,我检查了你所说的,当我运行我的软件时,我在我被阻止了一整天的那一行出现了错误。我会搜索这个问题,看看我能做什么。再次感谢!

以上是关于C#在windowsform的datagridview表格里面添加一列删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

每个工作班次 C# .NET WindowsForm 客户端控件的生产摘要图表

C# 委托和事件:一个简单的例子

c# windows form,部署前的下一步是啥?

我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?

c# 消除datagridview 单元格选中边框

在“错误的行”中抛出异常(C#、Windows 窗体、VS2017)