Member 11993108 Ответов: 1

Как обновить двоичное изображение в gridview, подробно описано ниже


Здравствуйте друзья,

Как новичок в C# ,я пробую различные возможности grid-view и застрял в ситуации.может ли кто-нибудь помочь решить эту проблему?

я сохранил двоичное изображение в базе данных и извлек его в сетку-вид,пока все хорошо,
когда я попытался обновить содержимое в сетке-представлении:
в моем сеточном представлении есть пять полей (productid,productname,price,productpic,description)

Для текста: текстовое поле Значение ProductName =(текстовое поле)управления gridview1.Ряды[электронный.Параметр rowindex].Клетки[1].Элементы управления[0];

когда дело доходит до поля изображения,которое является productpic, я застрял, я не знаю, какой код работает для обновления двоичного кодированного изображения

может ли кто - нибудь помочь мне найти решение?

Что я уже пробовал:

string images = "data:Image/png;base64," + Convert.ToBase64String((byte[])Eval("productpic"));


Изображения Изображения = gridview1, на.Ряды[электронный.Параметр rowindex].Ячейки[3].Элементы Управления[0];

Vincent Maverick Durano

Покажите нам свою HTML-разметку GridView. Я хочу посмотреть, как это будет объявлено.

Member 11993108

&ЛТ;АСП:таблицы с ID="gridview1, на" атрибут runat="сервер" AutoGenerateColumns="false" для свойства backcolor="Белый" необходимо="#CCCCCC" свойства borderstyle="нет" BorderWidth="1 пиксель" CellPadding="4" Цвет="Черный" сетки="горизонтальный" DataKeyNames="кодтовара" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"&ГТ;
<столбцы>
<asp:BoundField DataField="productname" HeaderText="Product Name" />
<asp:BoundField DataField="price" HeaderText="Price" />
<asp:TemplateField HeaderText="продукт">
<itemtemplate>
&ЛТ;АСП:идентификатор изображения="Изображение1" атрибут runat="сервер" Url_изображения=в'<%# "сведения:изображение/png;base64, и" + "конвертировать".ToBase64String((byte[])Eval("productpic")) %>' Width="200px" />


<asp:BoundField DataField="description" HeaderText="Description" />
&ЛТ;АСП:вариант командное поле в качестве ShowEditButton="истинной" /&ГТ;
&ЛТ;АСП:вариант командное поле в качестве ShowDeleteButton="истинной" /&ГТ;

Laxmidhar tatwa technologies

Винсент проклят .Пожалуйста, покажите html-код с сохранением кода

1 Ответов

Рейтинг:
2

Vincent Maverick Durano

Вам нужно чтобы иметь FileUpload контроль за EditItemTemplate таким образом, вы можете просматривать новое изображение.Затем вы можете обновить изображение из своей базы данных так же, как и обычные данные в своей базе данных. Идея состоит в том, чтобы получить существующее ID строки, содержащей ваше изображение, а затем обновите его с помощью нового изображения (либо обновите путь, либо само изображение ~ это зависит от того, как вы храните изображения).

Например ваш GridView было бы что-то вроде этого:

<asp:TemplateField HeaderText="Image">
          <ItemTemplate>
                   <asp:Image  runat="server" ID="Image1" />
          </ItemTemplate>
          <EditItemTemplate>
                    <asp:FileUpload ID="FileUpload1" runat="server" />
          </EditItemTemplate>
</asp:TemplateField>


Так как вы хранили изображение как Binary файл для их отображения, то вам не нужно будет обращаться к Image сам бы его обновил. Вместо этого вам просто нужно обновить данные из базы данных и повторно привязать ваш GridView чтобы отразить изменения. Вот пример, который я написал много лет назад: Часто задаваемые вопросы: отображение изображения из базы данных в элемент управления GridView[^]

Вот краткий пример:
private void Update(int ID, string name, decimal price, string description,byte[] image){
	using (SqlConnection connection = new SqlConnection("YOUR CONNECTION STRING HERE")) {
            string sql = "UPDATE YourTableName SET Name = @Name, Price = @Price, Description = @Description, Image = @Image WHERE ID = @ID";
            using (SqlCommand cmd = new SqlCommand(sql, connection)) {
			    cmd.Parameters.AddWithValue("@ID", ID);
	            cmd.Parameters.AddWithValue("@Name", name);
			    cmd.Parameters.AddWithValue("@Price", price);
			    cmd.Parameters.AddWithValue("@Description", description);
			    cmd.Parameters.AddWithValue("@Image", image);
			    cmd.ExecuteNonQuery();
            }
 	}
}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
	// turn to edit mode
        GridView1.EditIndex = e.NewEditIndex; 

	// Call the method for re-binding GridView to reflect changes made
        BindGridView(); 
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
        //Accessing Edited values from the GridView

        string id = GridView1.Rows[e.RowIndex].Cells[0].Text; //ID
        string name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text; //productname
        string price = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text; //price
        FileUpload fileUpload = (FileUpload)GridView1.Rows[e.RowIndex].Cells[3].FindControl("FileUpload1"); //FileUpload control
        string description = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text; //description

	//get newly uploaded image stream
	byte[] theImage = new byte[fileUpload.PostedFile.ContentLength];
        HttpPostedFile Image = fileUpload.PostedFile;
        Image.InputStream.Read(theImage, 0, (int)fileUpload.PostedFile.ContentLength);
        int length = theImage.Length; //get the length of the image
        string fileName = fileUpload.FileName.ToString(); //get the file name of the posted image
        string type = fileUpload.PostedFile.ContentType; //get the type of the posted image
        int size = fileUpload.PostedFile.ContentLength; //get the size in bytes that
        if (fileUpload.PostedFile != null && fileUpload.PostedFile.FileName != "")
        {
		// call update method
        	Update(id,name,price,description,theImage); 
        }

	//revert the state to read-only
        GridView1.EditIndex = -1;

	// Call the method for re-binding GridView to reflect changes made
        BindGridView(); 
}