0

目前我有一个以下代码填充一个datagridview,显示我们系统上的用户帐户信息。我想要做的是在datagridview上有一个选项“accountenabled”的复选框,并在表单底部有一个更新按钮,这样它将更新所有对他们进行了更改的用户。我目前正在使用 sqldatareader 拉回数据,但是从我读过的内容来看,我需要使用 sqldataadapter。我已经在 datagridview 上创建了列名,并且读者目前正在正确地拉回所有内容。

有人可以为我指出使用 sqldatadapter 执行此操作的正确方向吗?

谢谢

public UserAdmin()
    {
        InitializeComponent();

        //Load user list

        // Locals
        Functionality func = new Functionality();
        SqlConnection supportDB = null;
        SqlCommand CheckUser = null;
        SqlDataReader rdr;
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();

        string User = System.Environment.UserName.ToString();
        string spName = "gssp_ShowAllUsers";

        try
        {
            using (supportDB = new SqlConnection(GSCoreFunc.ConnectionDetails.getConnectionString(ConnectionType.SupportDB)))
            {
                using (CheckUser = new SqlCommand(spName, supportDB))
                {
                    // Set the command type
                    CheckUser.CommandType = CommandType.StoredProcedure;

                    // Populate the parameters.
                    CheckUser.Parameters.Add(func.CreateParameter("@spErrorID", SqlDbType.Int, ParameterDirection.Output, DBNull.Value));

                    // Open the connection and populate the reader with the SP output
                    supportDB.Open();
                    rdr = CheckUser.ExecuteReader();
                    if (CheckUser.Parameters["@spErrorID"].Value != null)
                    {
                        throw new InvalidOperationException();
                    }

                    // If the data reader has rows display output on label
                    if (rdr.HasRows)
                    {
                        //Output values
                        while (rdr.Read())
                        {
                            //Bind to data table
                            dgvUsers.Rows.Add(rdr["agentID"].ToString(), rdr["createdon"].ToString(), rdr["firstname"].ToString(), rdr["lastname"].ToString(), rdr["username"].ToString(), rdr["emailaddress"].ToString(), rdr["Departments"].ToString(), rdr["accountenabled"].ToString(), rdr["AgentAccountLevel"].ToString());
                        }
                    }

                    // Close reader and connection.
                    rdr.Close();
                    supportDB.Close();
                }
            }
        }

        catch (Exception ex)
        {
            //Show error message
            string error = ex.ToString(); //Real error
            string FriendlyError = "There has been error loading the user list"; // Error user will see
            GSCoreFunc.ShowMessageBox.msgBoxErrorShow(FriendlyError);

            //Log error to ExceptionDB
            GSCoreFunc.ReportException.reportEx(GSCoreFunc.ApplicationInformation.ApplicationName, error, FriendlyError, GSCoreFunc.ApplicationInformation.ComputerName, GSCoreFunc.ApplicationInformation.OperatingSystem, GSCoreFunc.ApplicationInformation.screenSize, GSCoreFunc.ApplicationInformation.IPAdddress, GSCoreFunc.ApplicationInformation.domainName);// Pass error to GSCoreFunc to log to the ExceptionDB
        }
    }

    private void btClose_Click(object sender, EventArgs e)
    {
        //Close window
        Close();
    }
}

}

4

2 回答 2

0

使用 SqlDataReader 没有任何问题。SqlDataAdapter 是一个更高级别的 api,它允许您遍历 SqlDataReader 并将结果的副本存储在 DataTable 或 DataSet 中。然后可以将此副本用作 DataGridView 的数据源。

我会用您的代码更改的一件事是使用数据绑定而不是手动生成每一行。如果将网格的 DataSource 属性设置为 SqlDataReader 或由 SqlDataAdapter 填充的 DataTable,然后调用网格 DataBind() 方法,网格应该会自动填充数据。

要控制列,您将确保您的查询仅返回所需的列,并且您将在您的 aspx 文件中定义列设置。

使用数据绑定通常是一种更简单、更灵活的方法,因此您应该考虑改用它。

于 2010-11-12T11:28:21.103 回答
0

看看这段代码

初始化一个 sql 适配器并用数据源填充。使用连接字符串而不是使用 sql 数据源,因为它很容易定制。:)

于 2010-11-12T11:48:49.900 回答