ماذا أستخدم بدلاً من e.Values.add(... لـ ListViewEditEventArgs لتحميل صورة
-
05-07-2019 - |
سؤال
يمكنني تحميل الصور إلى قاعدة البيانات باستخدام linq وعنصر تحكم listview عند الرجوع إلى طريقة e.Values لـ ListViewInsertEventArgs، ولكن لا يوجد مثل هذا الأسلوب في ListViewEditEventArgs، فما الذي يمكنني استخدامه لتحقيق نفس النتائج؟
هنا هو رمز الإدراج الخاص بي:
ProjectPhotosList_ItemInserting باطلة محمية (مرسل الكائن، ListViewInsertEventArgs e)
{
FileUpload uplImage = (FileUpload)ProjectPhotosList.InsertItem.FindControl("uplImage");
تسمية fileuploadlbl = (Label)ProjectPhotosList.InsertItem.FindControl("fileuploadlbl");
byte[] img = null;
if (uplImage.HasFile || !uplImage.FileName.ToLower().EndsWith(".jpg"))
{
try
{
img = new byte[uplImage.PostedFile.ContentLength];
uplImage.PostedFile.InputStream.Read(img, 0, img.Length);
}
catch
{
fileuploadlbl.Text = "unable to upload " + uplImage.FileName.ToString();
}
}
if (img == null)
{
e.Cancel = true;
fileuploadlbl.Text = "Please choose a file to upload";
}
try
{
e.Values.Add("ProjectPhoto", new System.Data.Linq.Binary(img));
fileuploadlbl.Text = "File Upload Successful";
}
catch
{
fileuploadlbl.Text = "File Upload Failed, please try again";
}
}
المحلول
حسنًا لقد قمت بحل المشكلة!كان علي فقط أن أتعامل مع الأمر بطريقة مختلفة قليلاً:
هذا هو الكود المهم:
int mykey = int.Parse(ProjectPhotosList.DataKeys[e.ItemIndex].Value.ToString());
إنها مجرد طريقة بسيطة للحصول على قيمة المفتاح الأساسي للصف المحدد.لقد وجدت منشورًا حول تحميل ملفات pdf إلى قاعدة بيانات وقررت أن أبني بقية الكود الخاص بي على ذلك.إذن هنا الكود الكامل:
ProjectPhotosList_ItemUpdating باطلة محمية (مرسل الكائن، ListViewUpdateEventArgs e)
{
FileUpload myFile = (FileUpload)ProjectPhotosList.EditItem.FindControl("uploadImage");
TextBox myCaption = (TextBox)ProjectPhotosList.EditItem.FindControl("ProjectPhotoCaptionTextBox");
int mykey = int.Parse(ProjectPhotosList.DataKeys[e.ItemIndex].Value.ToString());
if (myFile.HasFile)
{
//Get the posted file
Stream fileDataStream = myFile.PostedFile.InputStream;
//Get length of file
int fileLength = myFile.PostedFile.ContentLength;
//Create a byte array with file length
byte[] fileData = new byte[fileLength];
//Read the stream into the byte array
fileDataStream.Read(fileData, 0, fileLength);
//get the file type
string fileType = myFile.PostedFile.ContentType;
//Open Connection
PHJamesDataContext db = new PHJamesDataContext();
//Find the Right Row
PHJProjectPhoto Newphoto = (from p in db.PHJProjectPhotos
where p.ProjectPhotoId == mykey
select p).Single<PHJProjectPhoto>();
Newphoto.ProjectPhoto = fileData;
db.SubmitChanges();
}