0

好的,所以我在开发方面有点新。我在学校,我们刚刚有一个C#项目。问题是我们必须使用MVC做所有事情。无论如何,我需要创建一个按钮,当我得到消息框并按是时,它将删除我在 datagridview 中选择的行,同时它应该更新我的数据库。我为此创建了一个DAL和一个控制器。现在我很难在我的按钮事件中为我的按钮创建一个 try/catch/exception。

我在控制器和我的 dal 中发布了删除操作的代码。昨天我已经在谷歌上搜索了很长时间,但无法在我的中实施其他想法。

PS我使用bool的原因是我看到了一个使用它的教程,也许我应该使用其他更适合我的项目的东西?

达尔

public bool DeleteMembers()
{                
    con.Open();
    SqlCommand cmd = 
       new SqlCommand("delete from member where SocialSecurity=@SocialSecurity", 
           con);
    cmd.ExecuteNonQuery();
    con.Close();
    return true;
}

控制器

public bool DeleteMembers()
{
    bool cmd = dal.DeleteMembers();
    return cmd;
}

事件处理程序

private void btnDelete_Click(object sender, EventArgs e)
{
    try... 
}

我还设法做一个 foreach 方法来删​​除我的 datagridview 中的行。

foreach (DataGridViewRow item in this.dtGrid1.SelectedRows)
{
    dtGrid1.Rows.RemoveAt(item.Index);
}

PS我没有使用参数。所以没有带参数的代码,我没有受过足够的教育,我们不必在我们的项目中这样做。我知道sql注入。

4

1 回答 1

0

GridView 组件不适用于 ASP.NET MVC 应用程序。该组件严重依赖 ViewState 和 PostBack,它们是 ASP.NET MVC 中不再存在的概念。

您可以使用WebGrid helper来在视图中显示记录并提供删除功能。

因此,第一步是设计一个模型,该模型将代表您希望在视图中显示的记录:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string SocialSecurity { get; set; }
}

然后下一步是有一个数据层,它将查询您的关系数据库并提取模型。您可以使用诸如实体框架之类的 ORM 来简化此任务,或者直接使用普通的 ADO.NET,这就是我将在此处说明的内容:

public class PeopleRepository
{
    public IList<Person> Get()
    {
        var connectionString = ConfigurationManager
            .ConnectionString["SomeConnectionStringKey"]
            .ConnectionString;
        using (var conn = new SqlConnection(connectionString))
        using (var cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = "SELECT id, fname, lname, ssn FROM people";
            using (var reader = cmd.ExecuteReader())
            {
                var result = new List<Person>();
                while (reader.Read())
                {
                    result.Add(new Person
                    {
                        Id = reader.GetInt32(reader.GetOrindal("id")),
                        FirstName = reader.GetString(reader.GetOrindal("fname")),
                        LastName = reader.GetString(reader.GetOrindal("lname")),
                        SocialSecurity = reader.GetString(reader.GetOrindal("ssn"))
                    });
                }
                return result;
            }
        }
    }

    public void Delete(int id)
    {
        var connectionString = ConfigurationManager
            .ConnectionString["SomeConnectionStringKey"]
            .ConnectionString;
        using (var conn = new SqlConnection(connectionString))
        using (var cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = "DELETE FROM people WHERE id = @id";
            cmd.Parameters.AddWithValue("@id", id);
            cmd.ExecuteNonQuery();
        }
    }
}

下一步是有一个控制器来连接你的模型和视图:

public class PeopleController: Controller
{
    private readonly PeopleRepository repo = new PeopleRepository();

    public ActionResult Index()
    {
        IList<Person> model = repo.Get();
        return View(model);
    }

    [HttpPost]
    public ActionResult Delete(int id)
    {
        repo.Delete(id);
        IList<Person> model = repo.Get();
        return View("Index", model);
    }
}

最后一步当然是视图:

@model IList<Person>
@{
    var grid = new WebGrid(Model);
}

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column(columnName: "Id"),
        grid.Column(columnName: "FirstName", header: "First name"),
        grid.Column(columnName: "LastName", header: "Last name"),
        grid.Column(columnName: "SocialSecurity", header: "Social Security Number"),
        grid.Column(
            header: "", 
            format: 
                @<text>
                    <form action="@Url.Action("Delete", "People", new { id = item.Id })" method="post" onsubmit="return confirm('Are you sure you want to delete this person?');">
                        <button type="submit">Delete</button>
                    </form>
                </text>
        )
    )
)
于 2013-02-10T12:19:33.757 回答