数据集和网格视图交互(更新数据)

本文关键字:更新 数据 交互 网格 视图 数据集 | 更新日期: 2023-09-27 18:24:00

我对asp.net很陌生;我只是想在读我的问题之前让你们知道。我正在创建一个地址簿,并使用数据集在aspx页面中的网格视图中显示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();

此代码从数据库中获取数据,填充数据集,并将其显示在网格视图中。我的问题是如何更改网格视图,然后更新数据集,以便在SQL数据库中应用更改。我找到了很多教程,但它们的做法不同。他们将数据库链接到项目,而不编写任何代码,我想学习如何手动完成。我还尝试在gridview属性中启用编辑功能,该属性创建了一个带有编辑按钮的列,但当我点击它时,应用程序崩溃了。感谢我的程序员同事:)

PS:我不喜欢ADO.NET体系结构

数据集和网格视图交互(更新数据)

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

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

您有很多选择。我假设您使用的是webforms和asp.net,而不是使用asp.net MVC。

根据你的项目的健壮程度或你计划如何实施它,你可以走几条路。如果你有一个数据访问层,你可以使用EF(实体框架)来处理数据的检索和提交到数据库。EF真的很好,因为它将在Web表单之外为您处理许多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中的代码或背后的代码,几乎不可能就做什么或在哪里查找提出建议。