将数据库(我正在使用Northwind)绑定到DataGridView时遇到了很多麻烦。 我尝试了各种方法,但没有一种适用于所有操作,只有一些操作。 我也问过其他网站,但到目前为止我还没有得到任何有用的建议。
是否有一个教程涵盖了所有CRUD操作(或几个教程的组合,它们共同涵盖了所有内容)?
特别是删除操作让我头疼,因为我得到的唯一提示是将我的删除代码放入某些DataGridView事件,但问题是我无法找到确定用户想要删除的内容的方法。对于删除键,不会触发KeyDown事件。
谢谢!
编辑: 非常感谢你。该文件非常有用。 我有另一个问题,我有一个DataTable作为DataGridView的DataSource。 要更新它以执行用户输入CRUD操作,我是否需要手动将数据插入DataTable中,或者仅仅使用适配器的DeleteCommand / InsertCommand / etc属性构建常规SQL命令,然后将尚未修改的DataTable传递为Update方法中的参数?
即。这会让我得到一个新的行,使用用户刚刚输入DataGridView的值插入到db表中的结果吗?
private void DGV_Nwind_UserAddedRow(object sender, DataGridViewRowEventArgs e)
{
string sql = "INSERT INTO [" + table.TableName + "] VALUES ("; //sql command base
//add values to command
for (int i = 0; i < e.Row.Cells.Count; i++)
{
sql += "'" + e.Row.Cells[i].ToString() + "'";
if (i < (e.Row.Cells.Count - 1))
{
sql += ", ";
}
else
{
sql += ")";
}
}
//update table
con.OleAdapter.InsertCommand = new OleDbCommand(sql);
con.OleAdapter.Update(table);
}
答案 0 :(得分:1)
我创建了一个C#Lib&amp;应用程序,让您创建对象,CRUD操作(使用BLL&amp; DAL)和Web UI来执行CRUD操作。
http://manacodegenerator.codeplex.com
它轻巧且使用起来非常简单,它帮助我摆脱了那些无聊的重复代码创建时间。
我不断发展它,因为它是我每天使用的工具。
希望它有所帮助!
答案 1 :(得分:0)
如果您使用的是WPF应用程序,这里有一个如何进行CRUD操作的教程:
http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx#updates
基本上,您将绑定到行已删除的事件,并且在您的方法中,您将处理已删除的行。
以下是使用DataGridView的文档。其中有关于绑定到Delete事件和其他CRUD操作的信息:
http://www.windowsclient.net/Samples/Go%20To%20Market/DataGridView/DataGridView%20FAQ.doc
答案 2 :(得分:-1)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Projecttest
{
class Program
{
struct student
{
public string stid;
public string stname;
public string stage;
};
static void Main(string[] args)
{
student[] st = new student[4];
int choice;
string confirm;
int count = 0;
Console.WriteLine("Select operation to Perform");
Console.WriteLine("1. ADD");
Console.WriteLine("2. UPDATE");
Console.WriteLine("3. DELETE");
Console.WriteLine("4. SHOW");
do
{
Console.Write("enter your choice(1-4):");
choice = Convert.ToInt32(Console.ReadLine());
switch (choice)
{
case 1:
Add(st, count);
count++;
break;
case 2:
Update(st);
break;
case 3:
Delete(st);
break;
case 4:
Show(st);
break;
default:
Console.WriteLine("\nInvalid Selection\n");
break;
}
Console.Write("Press Y or y to continue:");
confirm = Console.ReadLine().ToString();
} while (confirm == "Y" || confirm == "y");
}
static void Add(student[] st, int count)
{
Console.Write("\nEnter student ID: ");
st[count].stid = Console.ReadLine();
Console.Write("Enter student name: ");
st[count].stname = Console.ReadLine();
Console.Write("Enter student age: ");
st[count].stage = Console.ReadLine();
}
static void Show(student[] st)
{
for (int count = 0; count < st.Length; count++)
{
if (st[count].stid != null)
{
Console.WriteLine("\nStudent ID : " + st[count].stid);
Console.WriteLine("Student Name : " + st[count].stname);
Console.WriteLine("Student Age : " + st[count].stage);
}
}
}
static void Delete(student[] st)
{
Console.Write("\nEnter student ID: ");
string studid = Console.ReadLine();
for (int count = 0; count < st.Length; count++)
{
if (studid == st[count].stid)
{
st[count].stid = null;
st[count].stname = null;
st[count].stage = null;
}
}
}
static void Update(student[] st)
{
Console.Write("\nEnter student ID: ");
string studid = Console.ReadLine();
for (int count = 0; count < st.Length; count++)
{
if (studid == st[count].stid)
{
Console.Write("Enter student name: ");
st[count].stname = Console.ReadLine();
Console.Write("Enter student age: ");
st[count].stage = Console.ReadLine();
}
}
}
}
}