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は、SqlDataReaderを反復処理し、結果のコピーをDataTableまたはDataSetに保存できる高レベルのAPIです。このコピーは、DataGridViewのデータソースとして使用できます。

コードで変更することの1つは、各行を手動で生成する代わりにデータバインディングを使用することです。グリッドのDataSourceプロパティをSqlDataReaderまたはSqlDataAdapterで埋められたDataTableのいずれかに設定してから、grids DataBind()メソッドを呼び出すと、グリッドにデータが自動的に埋められます。

列を制御するには、クエリが必要な列のみを返すようにし、aspxファイルで列の設定を定義します。

データバインディングの使用は、一般的に、より簡単で柔軟なアプローチであるため、代わりにそれを使用することを検討する必要があります。

于 2010-11-12T11:28:21.103 に答える
0

このコードを見てください

SQLアダプターを初期化し、データソースを入力します。カスタマイズが容易なため、SQLデータソース以外の接続文字列を使用してください。:)

于 2010-11-12T11:48:49.900 に答える