Καλημέρα.
Στο project που κάνω (με .net 2.0), δουλεύω με μία κύρια φόρμα, με user controls (αμάν με αυτά τα user controls...
)και με classes οι οποίες κάνουν τις λειτουργίες σχετικές με την database. Στην κύρια φόρμα υπάρχει ένα toolbar το οποίο έχει επιλογές για προσθήκη, διαγραφή, ανανέωση (refresh) επαφών, εργασιών, σημειώσεων κτλ. Η προσθήκη και η διαγραφή μου δουλεύουν μια χαρά, ενώ το refresh δε λειτουργεί καθόλου, σαν να μη τρέχει καθόλου το event. Nα σημειώσω ότι δουλεύω με controls της DevExpress. Έχω λοιπόν την κλάση Contact (o κώδικας περιέχει μόνο τα "κομμάτια" που αφορούν το πρόβλημα):
// Default constructor
private SqlDataAdapter da = new SqlDataAdapter();
private SqlCommand selectCommand = new SqlCommand();
private SqlCommand updateCommand = new SqlCommand();
private DataSet ds = new DataSet();
public Contact() {
//
// selectCommand
//
selectCommand.CommandText = @"
SELECT *
FROM Contact";
selectCommand.Connection = Database.Con;
//
// updateCommand
//
updateCommand.CommandText = @"
UPDATE Contact SET firstName = @firstName, lastName = @lastName, middleName = @middleName, prefix = @prefix,
homePhone = @homePhone, workPhone = @workPhone, mobilePhone = @mobilePhone, company = @company, position = @position,
personalEmail = @personalEmail, workEmail = @workEmail, homePage = @homePage, city = @city, address = @address, zipCode = @zipCode, birthday = @birthday,
personalPhone1 = @personalPhone1, personalPhone2 = @personalPhone2, personalMobile1 = @personalMobile1, personalMobile2 = @personalMobile2,
msn = @msn, notes = @notes
WHERE
contactId = @contactId";
updateCommand.Connection = Database.Con;
updateCommand.Parameters.Add( "@contactId", SqlDbType.Int, 0, "contactId" );
updateCommand.Parameters.Add( "@lastName", SqlDbType.VarChar, 30, "lastName" );
updateCommand.Parameters.Add( "@firstName", SqlDbType.VarChar, 30, "firstName" );
updateCommand.Parameters.Add( "@middleName", SqlDbType.VarChar, 30, "middleName" );
updateCommand.Parameters.Add( "@prefix", SqlDbType.VarChar, 5, "prefix" );
updateCommand.Parameters.Add( "@homePhone", SqlDbType.VarChar, 10, "homePhone" );
updateCommand.Parameters.Add( "@workPhone", SqlDbType.VarChar, 10, "workPhone" );
updateCommand.Parameters.Add( "@mobilePhone", SqlDbType.VarChar, 10, "mobilePhone" );
updateCommand.Parameters.Add( "@company", SqlDbType.VarChar, 30, "company" );
updateCommand.Parameters.Add( "@position", SqlDbType.VarChar, 30, "position" );
updateCommand.Parameters.Add( "@personalEmail", SqlDbType.VarChar, 30, "personalEmail" );
updateCommand.Parameters.Add( "@workEmail", SqlDbType.VarChar, 30, "workEmail" );
updateCommand.Parameters.Add( "@homePage", SqlDbType.VarChar, 30, "homePage" );
updateCommand.Parameters.Add( "@city", SqlDbType.VarChar, 30, "city" );
updateCommand.Parameters.Add( "@address", SqlDbType.VarChar, 30, "address" );
updateCommand.Parameters.Add( "@zipCode", SqlDbType.Int, 0, "zipCode" );
updateCommand.Parameters.Add( "@birthday", SqlDbType.DateTime, 0, "birthday" );
updateCommand.Parameters.Add( "@personalPhone1", SqlDbType.VarChar, 10, "personalPhone1" );
updateCommand.Parameters.Add( "@personalPhone2", SqlDbType.VarChar, 10, "personalPhone2" );
updateCommand.Parameters.Add( "@personalMobile1", SqlDbType.VarChar, 10, "personalMobile1" );
updateCommand.Parameters.Add( "@personalMobile2", SqlDbType.VarChar, 10, "personalMobile2" );
updateCommand.Parameters.Add( "@msn", SqlDbType.VarChar, 30, "msn" );
updateCommand.Parameters.Add( "@notes", SqlDbType.Text, 0, "notes" );
//
// da (Data Adapter)
//
da.SelectCommand = selectCommand;
da.UpdateCommand = updateCommand;
// fill dataset
da.Fill( ds, "Contact" );
}
/// <summary>
/// Executes UPDATE command to the database.
/// </summary>
public void Update() {
da.Update( ds.Tables["Contact"] );
}
Στο user control έχω αυτό το κομμάτι:
public void UpdateGridView() {
contact.Update();
}
Και στην mainForm έχω το event που καλεί την UpdateGridView():
...
OP.User_Controls.ucContact uc_Contact = new OP.User_Controls.ucContact();
...
private void barLargeButtonItemRefresh_ItemClick( object sender, DevExpress.XtraBars.ItemClickEventArgs e ) {
try {
uc_Contact.UpdateGridView();
}
catch (Exception ex) {
MessageBox.Show( "Αποτυχία ενημέρωσης της βάσης δεδομένων (Σφάλμα: " + ex.Message +
" )", "Σφάλμα", MessageBoxButtons.OK, MessageBoxIcon.Error );
}
}
Όλως περιέργως στο .net 1.1 ακριβώς το ίδιο παράδειγμα δουλεύει μια χαρά με απλά User Controls (όχι DevExpress).
Αναρωτιέμαι τώρα.... Τι φταίει; Φταίνε τα controls της DevExpress; Φταίει το .net 2.0;