目前我有一个以下代码填充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();
}
}
}
答案 0 :(得分:0)
使用SqlDataReader没有任何问题。 SqlDataAdapter是一个更高级别的api,它允许您遍历SqlDataReader并将结果的副本存储在DataTable或DataSet中。然后,可以将此副本用作DataGridView的数据源。
我将使用您的代码更改的一件事是使用数据绑定而不是手动生成每一行。如果将网格的DataSource属性设置为SqlDataReader或由SqlDataAdapter填充的DataTable,然后调用网格DataBind()方法,则网格应自动填充您的数据。
要控制列,您需要确保查询只返回所需的列,然后在aspx文件中定义列设置。
使用数据绑定通常是一种更简单,更灵活的方法,因此您应该考虑使用它。
答案 1 :(得分:0)
初始化sql适配器并填充数据源。使用除使用sql数据源之外的连接字符串,因为它很容易进行自定义。 :)