Erreur : mise à Jour nécessite un UpdateCommand valide lorsqu'il est passé DataRow collection de lignes modifiées
Je suis en utilisant la Pagination pour afficher les données en datagridview
, mais quand j'essaie de mettre à Jour les données avec updatebutton
de données doit être mise à jour Dans datagridview
ainsi que dans la base de données.
Mais j'obtiens cette erreur:
Mise à jour nécessite une UpdateCommand valide lorsqu'il est passé DataRow collection
avec des lignes modifiées
qui se passe sur cette ligne:
adp1.Update(dt);//here I am getting error
Ci-dessous est le code
public partial class EditMediClgList : Form
{
public EditMediClgList()
{
InitializeComponent();
try
{
con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");
con.Open();
}
catch (Exception err)
{
MessageBox.Show("Error:" +err);
}
cmd1 = new OleDbCommand("Select * from MedicalColeges order by MedicalClgID", con);
ds = new DataSet();
adp1 = new OleDbDataAdapter(cmd1);
adp1.Fill(ds, "MedicalColeges");
dataGridView1.DataSource = ds;
//Get total count of the pages;
this.CalculateTotalPages();
//Load the first page of data;
this.dataGridView1.DataSource = GetCurrentRecords(1, con);
}
private void CalculateTotalPages()
{
int rowCount = ds.Tables["MedicalColeges"].Rows.Count;
this.TotalPage = rowCount / PageSize;
if (rowCount % PageSize > 0) //if remainder is more than zero
{
this.TotalPage += 1;
}
}
private DataTable GetCurrentRecords(int page, OleDbConnection con)
{
dt = new DataTable();
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " * from MedicalColeges ORDER BY MedicalClgID", con);
//CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" * from MedicalColeges " +
"WHERE MedicalClgID NOT IN " +
"(Select TOP " + PreviouspageLimit + " MedicalClgID from MedicalColeges ORDER BY MedicalClgID) ", con); //+
//"order by customerid", con);
}
try
{
//con.Open();
this.adp1.SelectCommand = cmd2;
this.adp1.Fill(dt);
txtPaging.Text = string.Format("page{0} of {1} pages", this.CurrentPageIndex, this.TotalPage);
}
finally
{
//con.Close();
}
return dt;
}
private void button1_Click(object sender, EventArgs e)
{
try
{
adp1.Update(dt);//here I am getting error
}
catch (Exception err)
{
MessageBox.Show(err.Message.ToString());
}
}
}
OriginalL'auteur Durga | 2013-09-02
Vous devez vous connecter pour publier un commentaire.
Vous avez Créé le
OleDbDataAdapter
avec unSelect
commande uniquement:OleDbDataAdapter
nécessite valideUpdate
,Insert,
Delete
commandes à utiliser pour enregistrer les données comme ceci:Vous avez juste besoin d'utiliser un
OleDbCommandBuilder
qui permettra de générer les commandes pour vous:MODIFIER
Depuis que vous avez changer la commande Select de la
OleDbDataAdapter
au moment de l'exécution pour la pagination, ce que votre besoin est d'initialiser chaque fois que vous enregistrez des données:OriginalL'auteur Chris
Il se pourrait que vous êtes absent de Clé Primaire dans la table. Vous devez assurez-vous que la clé primaire est définie sur une colonne dans votre base de données de la table.
OriginalL'auteur Eaint
J'ai dû modifier mon (incrémentation) indice de colonne à la la clé primaire de ma table (comme Eaint suggèrent). Après cela, j'ai dû tirer vers le haut l'ensemble de données.xsd en vue du concepteur, de droite, cliquez sur le visuel objet DataTable et sélectionnez configurer. Lorsque l'Assistant Configuration de TableAdapter ouvert, j'ai cliqué sur le bouton Options Avancées. J'ai vérifié de Générer des commandes Insert, Update et Delete, case à cocher, puis OK, et la Finition. Après cette (encore dans le concepteur de vue), j'ai choisi le visuel de TableAdapter objet qui m'a donné toutes les propriétés complètes. Le SQL a été généré automatiquement. A fallu un certain temps pour moi de suivre ce vers le bas, donc j'espère que cela aide quelqu'un.
OriginalL'auteur Nallware