La valeur ne peut pas être null. Nom du paramètre: la source de données. L'édition de grille de données et les Enregistrer dans la Base de données
Bonjour, je vais avoir un problème ici. Le code ressemble à ceci.
private void Form3_Load(object sender, EventArgs e)
{
string connectionString =
"Server=localhost;" +
"Database=oroderm;" +
"User ID=root;" +
"Password=root;" +
"Pooling=false";
string query = "Select * from client";
MySqlConnection conn = new MySqlConnection(connectionString);
MySqlDataAdapter dAdapter = new MySqlDataAdapter(query, connectionString);
conn.Open();
DataSet ds = new DataSet();
MySqlCommandBuilder cBuilder = new MySqlCommandBuilder(dAdapter);
dAdapter.Fill(ds, "client");
BindingSource bSource = new BindingSource();
bSource.DataSource = ds.Tables["client"];
dataGridView2.DataSource = bSource;
}
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = ds.Tables["client"];
this.dataGridView2.BindingContext[dt].EndCurrentEdit();
this.da.Update(dt);
}
Donc ce que je veux, c'est que chaque fois que j'ai modifier les valeurs dans mon Datagrid il aura une incidence sur ma base de données après je clique sur le bouton1 (bouton enregistrer). ex. Si j'ai romaine que le client après avoir changé son nom et j'ai cliquez sur button1 il devrait changer. Toutefois Im obtenir une valeur ne peut pas être null erreur. Svp quelqu'un peut-il aider. T_T
*EDIT: Voici le Code mis à Jour
private MySqlDataAdapter _da;
private DataTable _dt;
private DataSet _ds;
private void Form3_Load(object sender, EventArgs e)
{
updateClient();
}
public void updateClient()
{
string connectionString =
"Server=localhost;" +
"Database=oroderm;" +
"User ID=root;" +
"Password=root;" +
"Pooling=false";
string query = "select * from client";
MySqlConnection conn = new MySqlConnection(connectionString);
_da = new MySqlDataAdapter(query, connectionString);
conn.Open();
_ds = new DataSet();
MySqlCommandBuilder cBuilder = new MySqlCommandBuilder(_da);
_da.Fill(_ds, "client");
BindingSource bSource = new BindingSource();
bSource.DataSource = _ds.Tables["client"];
dataGridView2.DataSource = bSource;
_da.UpdateCommand = cBuilder.GetUpdateCommand();
}
private void button1_Click(object sender, EventArgs e)
{
_dt = _ds.Tables["client"];
this.dataGridView2.BindingContext[_dt].EndCurrentEdit();
this._da.Update(_dt);
}
OriginalL'auteur rj tubera | 2011-12-04
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous avez une instance variable appelée
ds
, et vous vous attendez leForm3_Load
méthode pour la remplir? Cela ne se produira pas - parce que, dansForm3_Load
vous avez ceci:Que la déclaration d'un nouveau local variable appelée
ds
, de sorte que si vous utilisez explicitementthis.ds
dans la méthode, vous n'allez pas changer la valeur de lainstance
variable.Je suis un peu surpris que vous n'obtenez pas une
NullReferenceException
lorsque vous cliquez sur le bouton, mais peut-être que vous avez un peu de code pour créer un videDataSet
et affecter une référence à lads
variable d'instance, de quelque part. De toute façon, en changeant la ligne ci-dessus pour seulement:devrait corriger ce problème.
(Je conseille vivement contre faire des demandes de base de données dans le thread de l'INTERFACE utilisateur, vous l'esprit, et vous devriez avoir une
using
déclaration de votre connexion, mais ce sont des questions distinctes.)Je ne sais pas, mais qui sonne comme une question distincte pour moi, avec une description plus détaillée requise et la mise à jour du code. (Vous ne devriez pas vraiment global variables pour tout cela, d'ailleurs.)
Ive Mis la mise à jour du code ci-dessus. Merci beaucoup de m'aider. T_T
Non, je vous suggère de demander à un question. Un Débordement de pile ne fonctionne pas bien lorsque l'on post se termine effectivement en place contenant plusieurs questions qui changent au fil du temps.
OriginalL'auteur Jon Skeet