2010-11-12 9 views
0

Actuellement j'ai un le code suivant remplissant une vue de données de données montrant les informations de compte d'utilisateur sur notre système. Ce que je veux faire est d'avoir une case à cocher sur le datagridview pour l'option "accountenabled" et un bouton de mise à jour au bas du formulaire pour qu'il mette à jour tous les utilisateurs qui ont subi des changements. Je tire actuellement les données en utilisant un sqldatareader cependant de ce que j'ai lu j'ai besoin d'employer un sqldataadapter. J'ai créé les noms de colonne sur le datagridview et le lecteur récupère actuellement tout correctement.Sqldataapter advice

Quelqu'un pourrait-il me diriger dans la bonne direction pour le faire avec un adaptateur sqldatadapter?

Merci

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(); 
    } 
} 

}

Répondre

0

Il n'y a rien de mal à utiliser SqlDataReader. Le SqlDataAdapter est une API de niveau supérieur qui vous permet de parcourir une SqlDataReader et de stocker une copie des résultats dans un DataTable ou un DataSet. Cette copie peut ensuite être utilisée comme source de données pour votre DataGridView. Une chose que je voudrais changer avec votre code serait d'utiliser la liaison de données au lieu de générer chaque ligne manuellement. Si vous définissez la propriété DataSource de la grille à votre SqlDataReader ou à un DataTable rempli par un SqlDataAdapter, puis appelez la méthode Grid DataBind(), la grille doit être automatiquement remplie avec vos données.

Pour contrôler les colonnes, assurez-vous que votre requête ne renvoie que les colonnes requises et définissez la configuration de la colonne dans votre fichier aspx. L'utilisation de la liaison de données est généralement une approche plus simple et plus flexible. Vous devriez donc envisager d'utiliser cette méthode à la place.

+0

Merci pour le conseil Rune. C'est un winform sur lequel je travaille. Pourriez-vous donner un exemple de la façon dont j'utiliserais la liaison de données au lieu de générer chaque ligne? – Steve

+0

@Steve: Regardez ici: http://support.microsoft.com/kb/307860 Le premier exemple intéressant est celui des contrôles de liste Data-Bound. C'est simple, mais couvre les bases. Plus bas, vous avez un exemple de la manière de lier un DataReader à la place d'une table de données. –

0

Look at this code

initialiser un adaptateur SQL et remplir avec de la source de données. Utilisez une chaîne de connexion autre que l'utilisation de la source de données SQL car il serait facile à personnaliser. :)