数据集和gridview交互(更新数据)

时间:2012-02-09 17:23:49

标签: c# asp.net sql-server gridview dataset

我是asp.net的新手;只是想在阅读我的问题之前让你们知道。我正在创建一个地址簿,我正在使用数据集在aspx页面的gridview中显示我的SQL数据库中的数据。到目前为止我有这个代码

            SqlConnection conn = new SqlConnection(conectionstring);
            conn.Open();
            string sql = "SELECT * FROM Directorio";
            SqlDataAdapter myCommand = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds);
            DataView source = new DataView(ds.Tables[0]);
            GridView1.DataSource = source;
            GridView1.DataBind();

此代码从数据库获取数据,填充数据集,并在gridview中显示它。我的问题是如何更改gridview,然后更新数据集,以便我可以在SQL数据库中应用更改。 我发现了许多教程,但他们做的事情有所不同。他们将数据库链接到项目并且不编码任何这些,我想学习如何手动完成。 我还尝试在使用编辑按钮创建列的gridview属性中启用编辑,但是当我单击它时,应用程序崩溃。 感谢我的同事们:)

PS:我确实不支持ADO.NET架构

2 个答案:

答案 0 :(得分:1)

基本上,数据源控件需要协调更改,因为它在asp.net体系结构的上下文中很复杂。

我想我知道你来自哪里,我完全在那里 - 你可能会喜欢这篇文章:http://msdn.microsoft.com/en-us/library/aa581776.aspx

答案 1 :(得分:0)

你有很多选择。我假设您正在使用webforms和asp.net与使用asp.net MVC。

根据项目的强大程度或计划如何实施,您可以选择几条路线。 如果您有数据访问层,则可以使用EF(实体框架)来处理数据的检索和提交。 EF非常好用,它会在你的webform之外为你处理很多CRUD操作。不完全抽象,但它从你的代码隐藏中获取sql并进入一个单独的/可管理的层。

如果这是一个小项目或者你正在玩的东西,你可以使用相同的ado / sql将数据插回到表中

public int CreateNewUser(string username, string password)
    {
        int insertUser = DatabaseUtilities.Perform_CRUD_Operation(
            String.Format(
                "INSERT INTO ContactsUser (UserName, Password) " +
                "VALUES ('{0}', '{1}',
                username, password),
            ConnectionString);
    }


//factored out the Perform operation for reuse in other classes you could do all this in one call 

public static int Perform_CRUD_Operation(string sqlStatement, string connectionString)
    {
        OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB;" + connectionString);
        OleDbCommand cmd = new OleDbCommand(sqlStatement, con);

        try
        {
            con.Open();
            int affectedRows = cmd.ExecuteNonQuery();
            if (affectedRows == 1)
            {
                return 0;
            }
            else
            {
                return AFFECTED_ROWS_ERROR;
            }
        }
        catch (Exception)
        {
            return UNHANDLED_ERROR;
        }
        finally
        {
            con.Close();
        }
    } 

以上只是一个例子。如果您正在为生产代码做任何事情我强烈建议使用EF或使用存储过程。使用上面的代码可以用于测试或概念验证,但它实际上很容易被sql注入,并且可能非常不安全。

对于没有看到UI或代码背后的代码的网格视图,几乎不可能对要做什么或在哪里查看提出建议。