Je suis nouveau en programmation et j'essaye de télécharger une image et de l'enregistrer dans un dossier avec l'ID de produit actuel. Cependant, lorsque je mets à jour l'image, un nouveau dossier est créé. Au lieu de renvoyer maxId ++, comment puis-je stocker l'ID dans DataContext et le renvoyer s'il existe? Voici le code.
private void upload_Click_1(object sender, EventArgs e)
{
OpenFileDialog opFile = new OpenFileDialog();
opFile.Title = "Select image for this product";
opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
if (opFile.ShowDialog() == DialogResult.OK)
{
try
{
string iName = opFile.FileName;
var dir = @"images/" + GetCurrentId();
var path = Path.Combine(dir, Path.GetFileName(iName));
if (!Directory.Exists(dir) &&(produto)this.tbprodutoBindingSource.Current == null))
{
Directory.CreateDirectory(dir);
}
File.Copy(iName, path);
}
catch (Exception ex)
{
MessageBox.Show("Unable to open file " + ex.Message);
}
}
else
{
opFile.Dispose();
}
}
private int GetCurrentId()
{
var result = dataContextFactory.DataContext.produtos.Max(x => x.id_produto);
int maxId = Convert.ToInt32(result);
if (maxId == 0) maxId = 1;
else
maxId++;
return maxId;
}
3 Réponses :
Je n'obtiens pas vraiment ce que vous voulez, mais je vais essayer de résoudre le problème que j'ai.
[Id] [FileName] .jpg ? Si vous voulez ce dernier, vous pouvez changer cela Product existingProduct = getProduct(); string id = existingProduct.GetID(); var dir = "@images"; var path = Path.Combine(dir, id); File.Copy(iName, path);
dans ce
string id = Guid.NewGuid().ToString(); Product newProduct = new Product(); newProduct.ProductID = id; var dir = "@images"; var path = Path.Combine(dir, id); File.Copy(iName, path);
string id = Guid.NewGuid().ToString();
File.Copy (iName, path) ne nécessite pas le même nom de fichier iName et path, vous pouvez changer le nom et cela ne générera aucun problème. p >
Si le produit est un nouvel enregistrement, vous pouvez générer un uuid, l'utiliser pour l'image, puis l'utiliser pour l'identifiant du produit.
var dir = @"images"; var fileName = GetCurrentId() + Path.GetFileName(iName); var path = Path.Combine(dir, fileName);
Si le produit est un ancien enregistrement, vous pouvez obtenir l'identifiant du produit et utiliser cet identifiant pour le nom de l'image.
var dir = @"images/" + GetCurrentId(); var path = Path.Combine(dir, Path.GetFileName(iName));
Ce que vous proposez ne fonctionnera pas, j'essaie d'ajouter les détails des produits le long de l'image sur la base de données, mais je veux stocker l'image le long de l'identifiant du produit quel numéro automatique mais comme il n'a pas été créé, je ne peux pas en obtenir l'identifiant . C'est pourquoi je fais max + 1, mais lorsque je mets à jour, cela crée un nouveau dossier. Je souhaite obtenir l'identifiant du produit qui n'a pas encore été créé
Comment puis-je obtenir le produit BindingSource.Current ID?
Quelqu'un pourrait-il m'aider?
Vous pouvez générer un uuid à l'aide de la bibliothèque C # pour obtenir l'uuid avant de l'insérer.
Un exemple où puis-je trouver?
Utiliser simplement string id = Guid.NewGuid (). ToString (); fonctionne pour moi, mais vous pouvez vous référer à ici si cela ne suffit pas.
Je veux dire que j'utilise File.Copy (iName, chemin), pour cette raison, je ne peux pas changer le nom de l'image qui a été téléchargée, après cela, j'ajoute un nouvel élément à la source de données gridview. Je veux obtenir l'identifiant de l'enregistrement actuel
Ou du moins réussir à créer un enregistrement et à ajouter le même identifiant au dossier et lorsque je mets à jour quelque chose sur l'enregistrement au lieu de créer un nouveau dossier, à mettre à jour ce même dossier, mais pour cela je dois vérifier si l'identifiant actuel est nul ou ne pas
Modifié la réponse, peut-être que vous pouvez trouver la solution là-bas.
File.Copy (iName, path) ne nécessite pas le même nom de fichier iName et path, vous pouvez changer le nom et cela ne générera aucun problème. En fait, cela provoque une erreur car je copie le fichier, lorsque je change le nom de l'image, cela provoque une erreur et l'image ne peut pas être téléchargée.
Je ne veux pas créer de dossier à chaque fois que je télécharge une image, je veux ajuster l'ID du produit, qui n'a pas encore été créé, dans le dossier d'image. Si l'ID de produit actuel est 22, j'ai besoin d'un dossier avec le nom 22 et ses images dessus. Ce qui a été proposé me permet également de mettre à jour?
File.Copy (iName, path) ne nécessite pas le même nom de fichier iName et chemin, vous pouvez changer le nom et cela ne générera aucun problème. En fait, cela provoque une erreur car je copie le fichier, lorsque je changer le nom de l'image cela provoque une erreur et l'image ne peut pas être téléversé.
J'ai essayé de copier une image vers un autre chemin et cela ne pose aucun problème. Mais si le nom de l'image est déterminé par votre téléchargement, cela ne peut pas être aidé.
Je ne veux pas créer de dossier à chaque fois que je télécharge une image, je veux ajustez l'ID du produit, qui n'a pas encore été créé, dans le dossier image. Si l'ID de produit actuel est 22, j'ai besoin d'un dossier portant le nom 22 et ses images dessus.
Vous pouvez y parvenir en utilisant quelque chose comme ceci:
// Delete the old image in the folder var dir = @"images/" + imageID; string oldImageName = Directory.GetFiles(dir).FirstOrDefault(); File.Delete(oldImageName); // Copy the new image to the folder var path = Path.Combine(dir, Path.GetFileName(iName)); File.Copy(iName, path);Qu'est-ce qui a été proposé me permet également de mettre à jour?
Oui. Vous souhaiterez peut-être supprimer l'ancienne image avant de téléverser la nouvelle image.
var dir = @"images/" + imageID; var path = Path.Combine(dir, Path.GetFileName(iName)); File.Copy(iName, path);
Voici un conseil de carrière: utiliser MAX pour obtenir le prochain identifiant est toujours faux, pour plusieurs raisons. Un ID doit être auto-incrémenté. Insérez votre enregistrement puis récupérez l'identifiant généré par la base de données.