0

さて、開発ではちょっと新しいです。私は学校に通っていて、C#に関するプロジェクトを取得しました。問題は、 MVCを使用してすべてを実行する必要があるということです。とにかく、メッセージボックスを取得して[はい]を押すと、データグリッドビューで選択した行が削除され、同時にデータベースが更新されるボタンを作成する必要があります。このためにDALとコントローラーを作成しました。ボタンイベントでボタンのtry/catch/exceptionを作成するのに問題があります。

コントローラと私のdalの両方で削除アクションのコードを投稿しています。私は昨日それについて長い間グーグルしてきましたが、私の中で他のアイデアを実装することができません。

PS私がboolを使用する理由は、それを使用したチュートリアルを見たからです。おそらく、プロジェクトにより適した他の何かを使用する必要がありますか?

DAL

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

TController

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

イベントハンドラー

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

また、datagridviewの行を削除するforeachメソッドを実行することもできました。

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

PSimはパラメータを使用していません。したがって、パラメータを含むコードはなく、十分な教育を受けていないため、プロジェクトに参加する必要はありません。SQLインジェクションについて知っています。

4

1 に答える 1

0

GridViewコンポーネントは、ASP.NETMVCアプリケーションでの使用を目的としたものではありません。このコンポーネントは、ASP.NETMVCに存在しなくなった概念であるViewStateとPostBackに大きく依存しています。

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; }
}

次に、リレーショナルデータベースにクエリを実行してモデルを引き出すデータレイヤーを作成します。Entity Frameworkなどの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 に答える