abdujalilc Ответов: 1

Вставить выбранное изображение из gridview в in ASP.NET


Я хочу вставить выбранное изображение из gridview в таблицу mysql. Когда я пытаюсь это сделать, он дает мне сообщение:
- Исключение типа "система".InvalidCastException ' произошло в App_Web_zptg3ta3.dll но не был обработан в пользовательском коде.
Дополнительная информация: не удается привести объект типа 'System.Системы типа int32' в тип '.Данных.Объекта datarow'."
Любой пример помощи будет оценен по достоинству.
Ниже приведен мой код:
if (gvImages.SelectedIndex != -1)
        {
            //this is the predicted problem line
            DataRow SelectedRowValue = ((DataRow)gvImages.SelectedValue);
            byte[] ImageBytes = (byte[])SelectedRowValue.ItemArray[1];
            MySqlCommand cmd2 = new MySqlCommand("INSERT INTO rasmlar (Rasm)VALUES (@ImageSource)", con);
            cmd2.Parameters.Add("@ImageSource", MySqlDbType.Blob, ImageBytes.Length).Value = ImageBytes;
            cmd2.ExecuteNonQuery();
        }


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

Gridviewrow row = (GridViewRow)gvImages.SelectedRow;
DataRowView SelectedRowValue = ((DataRowView)gvImages.SelectedValue);

F-ES Sitecore

gvImages.SelectedValue будет int. Учитывая то, что вы опубликовали, мы не можем знать, почему, мы не знаем, что такое gvImages и как он заполняется. Возможно, вы захотите сделать что-то подобное вместо этого

GridViewRow SelectedRowValue = ((GridViewRow)gvImages.Строки[gvImages.SelectedValue]);

Однако, как я уже сказал, Мы мало что можем сказать из того, что вы опубликовали.

1 Ответов

Рейтинг:
0

Vincent Maverick Durano

Ошибка в значительной степени объясняется сама собой. Это означает, что вы не можете привести SelectedValue к DataRow, потому что SelectedValue вернет целое число. Кроме того, если вы хотите получить SelectedRow, вы можете обработать его в событии SelectedIndexChanged.

Но имейте в виду, что для запуска события SelectedIndexChanged вам необходимо настроить командное поле ShowSelectButton или установить AutoGenerateSelectButton в true в вашем GridView. Например:

<asp:gridview id="GridView1" runat="server"

	AutoGenerateColumns="False" 

	OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
	<columns>
		<asp:commandfield showselectbutton="True" />
		<asp:boundfield />
		<asp:boundfield />
	</columns>
</asp:gridview>


Затем вы можете ссылаться на элемент управления изображением следующим образом:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
       Image img  = (Image)GridView1.SelectedRow.FindControl("TheImageID");
       if(img != null){
            //do stuff
       }
} 


Но так как вы хотите сохранить изображение как blob-объект, то я не думаю, что ваш существующий код будет работать. Вам нужно будет сначала загрузить изображение, а затем передать загруженное изображение в потоковом режиме, чтобы получить массив байтов. Есть масса примеров, которые демонстрируют это, вам просто нужно найти их в google.

Этот один из них:
Сохранения и извлечения больших двоичных объектов изображений из базы данных MySQL в ASP.Net, C# и VB.Net[^]


Karthik_Mahalingam

5

Vincent Maverick Durano

Спасибо, Картик! :)

abdujalilc

Спасибо, хорошее объяснение. Если я хочу, чтобы выбранное изображение было показано в элементе управления изображением, можете ли вы показать мне несколько примеров кодов в качестве ссылки?

Vincent Maverick Durano

На самом деле это очень просто. Вам просто нужно взять источник из выбранного изображения и установить его в свой элемент управления изображением следующим образом:

Image img = (Image)GridView1.SelectedRow. FindControl ("TheImageID");
если(рис != нуль){
Рис1.Url_изображения = ИМГ.Url_изображения;
}

abdujalilc

Спасибо, что сработало. Можно ли теперь получить и сохранить загруженное изображение в Image control в БД? Пожалуйста, приведите несколько примеров.

Vincent Maverick Durano

Элемент управления изображением ничего не загружает, так что, строго говоря, вы не можете этого сделать. Вы можете попробовать заглянуть в MemoryStream