asp.net вставляет изображение в базу данных через ListView Control
Я могу вставлять изображения в базу данных или отображать их в Image Control и так далее, но я бы хотел вставить их в базу данных через ListView. Я достиг этого частично. Во время вставки нового элемента, я просматриваю изображение с помощью FileUpload Control "FileUploadMedical" и вставляю его в базу данных с помощью "MedicalUploadButton" (вы можете увидеть его код ниже). Я хочу избавиться от этого MedicalUploadButton и использовать по умолчанию ListView кнопки "Вставить" и "Редактировать". Мне, вероятно, следует сохранить элемент управления "FileUpload" для просмотра изображения. Ниже то, что я сделал, Софар.
Обычно я отображаю изображение в виде списка через ImageHandler.ashx и отображаю изображение на ItemTemplate, как показано ниже;
<ItemTemplate >
<tr style="">
<td>
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="Delete" />
<asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
</td>
<td>
<asp:Image ID="MedicalImage" runat="server" ImageUrl='<%# "~/Handlers/ImageHandler.ashx?ID="+Eval("MedicalID")+"&Entity=Medical"%>'/>
</td>
</tr>
</ItemTemplate>
Работает отлично.
Вот как я вставляю изображение в просмотр списка;
<InsertItemTemplate>
<tr style="">
<td>
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" />
</td>
<td>
<asp:FileUpload ID="FileUploadMedical" runat="server" />
<asp:Button ID="MedicalUploadButton" runat="server" text="Hoch Laden" OnClick="MedicalUploadButton_Click"/>
</td>
</tr>
</InsertItemTemplate>
Код За кнопкой Медицинская загрузка Кнопка
protected void MedicalUploadButton_Click(object sender, EventArgs e)
{
FileUpload Fupload = (FileUpload)AdminListView.EditItem.FindControl("FileUploadMedical");
if (Fupload.HasFile)
{
string FilePath = Fupload.PostedFile.FileName;
string FileName = Path.GetFileName(FilePath);
string Ext = Path.GetExtension(FileName);
string ContentType = String.Empty;
switch (Ext)
{
case ".jpg":
ContentType = "Image/jpg";
break;
case ".jpeg":
ContentType = "Image/jpeg";
break;
case ".png":
ContentType = "Image/png";
break;
case ".bmp":
ContentType = "Image/bmp";
break;
}
if (ContentType != String.Empty)
{
Stream FileStream = Fupload.PostedFile.InputStream;
BinaryReader FileReader = new BinaryReader(FileStream);
Byte[] bytes = FileReader.ReadBytes((Int32)FileStream.Length);
//double check and make sure that this is getting the correct item
ListViewItem commentItem = ((Button)sender).NamingContainer as ListViewItem;
if (commentItem != null)
{
//instead of using the DisplayIndex use the DataItemIndex
int medID = (int)AdminListView.DataKeys[commentItem.DataItemIndex]["MedicalID"];
//insert the file into database
using (Entity.MedicalEntities emp = new Entity.MedicalEntities())
{
Entity.Medical medicals = (from h in emp.Medicals where h.MedicalID == medID select h).First();
medicals.MedicalImage = bytes;
emp.SaveChanges();
}
}
}
}
}
Это на самом деле довольно просто и отлично работает, но на InsertItemTemplate или EditItemTemplate я не хочу использовать свою пользовательскую функцию MedicalUploadButton_Click, но я просто хочу использовать этот элемент управления FileUpload "MedicalUpload", просмотрите изображение, затем нажмите "Вставить" или "Изменить", и изображение должно быть вставлен в базу данных.
Чтобы быть более точным, я хочу удалить эту функцию MedicalUploadButton_Click и использовать кнопки "Вставить" и "Редактировать" по умолчанию для просмотра списка, чтобы вставить изображение.
1 ответ
Я решил проблему после некоторых исследований. Прежде всего мы должны добавить следующие события в listview;
OnItemUpdating="DistrictList_ItemUpdating" OnItemInserted="DistrictList_ItemInserted"
В коде DistrictList_ItemUpdating (для команды Edit) вы можете добавить следующее;
protected void DistrictList_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
FileUpload Fupload = (FileUpload)DistrictList.EditItem.FindControl("FileUploadDistrictEdit");
if (Fupload.HasFile)
{
string FilePath = Fupload.PostedFile.FileName;
string FileName = Path.GetFileName(FilePath);
string Ext = Path.GetExtension(FileName);
string ContentType = String.Empty;
switch (Ext)
{
case ".jpg":
ContentType = "Image/jpg";
break;
case ".jpeg":
ContentType = "Image/jpeg";
break;
case ".png":
ContentType = "Image/png";
break;
case ".bmp":
ContentType = "Image/bmp";
break;
}
if (ContentType != String.Empty)
{
Stream FileStream = Fupload.PostedFile.InputStream;
BinaryReader FileReader = new BinaryReader(FileStream);
Byte[] bytes = FileReader.ReadBytes((Int32)FileStream.Length);
string disName = e.NewValues["DistrictName"].ToString();
//insert the file into database
using (Entity.MedicalEntities emp = new Entity.MedicalEntities())
{
Entity.District districts = (from h in emp.Districts where h.DistrictName == disName select h).First();
districts.DistrictImage = bytes;
emp.SaveChanges();
}
}
}
}
Для части обновления для меня самая важная часть - следующая строка. Получение значения DistrictName строки редактирования представления списка;
string disName = e.NewValues["DistrictName"].ToString();
А для команды Вставить вы можете добавить следующее. Я использую команду "Вставлено" для этого. Получите "DistrictName" недавно добавленной записи "District" и используйте ее в пункте "Где" в linq.
protected void DistrictList_ItemInserted(object sender, ListViewInsertedEventArgs e)
{
FileUpload Fupload = (FileUpload)DistrictList.InsertItem.FindControl("FileUploadDistrictInsert");
if (Fupload.HasFile)
{
string FilePath = Fupload.PostedFile.FileName;
string FileName = Path.GetFileName(FilePath);
string Ext = Path.GetExtension(FileName);
string ContentType = String.Empty;
switch (Ext)
{
case ".jpg":
ContentType = "Image/jpg";
break;
case ".JPG":
ContentType = "Image/jpg";
break;
case ".jpeg":
ContentType = "Image/jpeg";
break;
case ".JPEG":
ContentType = "Image/jpeg";
break;
case ".png":
ContentType = "Image/png";
break;
case ".PNG":
ContentType = "Image/png";
break;
case ".bmp":
ContentType = "Image/bmp";
break;
case ".BMP":
ContentType = "Image/bmp";
break;
}
if (ContentType != String.Empty)
{
Stream FileStream = Fupload.PostedFile.InputStream;
BinaryReader FileReader = new BinaryReader(FileStream);
Byte[] bytes = FileReader.ReadBytes((Int32)FileStream.Length);
string disID = e.Values["DistrictName"].ToString();
//insert the file into database
using (Entity.MedicalEntities emp = new Entity.MedicalEntities())
{
Entity.District districts = (from h in emp.Districts where h.DistrictName == disID select h).First();
districts.DistrictImage = bytes;
emp.SaveChanges();
}
}
}
}
И снова для меня самая важная часть этого - следующая строка, чтобы получить "DistrictName" вновь созданной записи;
string disID = e.Values["DistrictName"].ToString();
Если у вас есть предложения или вы нашли какой-либо недостаток, пожалуйста, дайте мне знать.