Загрузка изображения через gridview вопрос - PullRequest
0 голосов
/ 28 апреля 2009

У меня есть сетка, которая отображает данные из базы данных. База данных хранит имя файла изображения (строку) среди прочего для элемента.

У меня есть элемент управления загрузкой файлов, отображаемый в режиме редактирования, и он прекрасно загружает файл.

Проблема в том, что я хочу обновить имя файла изображения в базе данных, и я не уверен, как получить данные в элемент управления textbox, который gridview использует для ОБНОВЛЕНИЯ базы данных. Элемент управления текстовое поле я установил видимость скрытого. вот код aspx:

    <asp:TemplateField HeaderText="Image" SortExpression="Image">
                <EditItemTemplate>
                    <asp:TextBox ID="txtImage" runat="server" Text='<%# Bind("Image") %>' Visible="False" OnTextChanged="txtImage_TextChanged"></asp:TextBox>
                    <asp:FileUpload ID="FileUpload1" runat="server" />
                </EditItemTemplate>
                <ItemTemplate>                        
                    <asp:Image ID="Image1" runat="server" Width="50px" AlternateText='<%# Eval("Image") %>' ImageUrl='<%# "images/hardware/" + Eval("Image") %>' />
                </ItemTemplate>
            </asp:TemplateField>

А вот функция, которая сохраняет файл на сервере и помещает имя файла в переменную:

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = GridView1.Rows[e.RowIndex];
        FileUpload fileUpload = row.Cells[0].FindControl("FileUpload1") as FileUpload;
         if ( fileUpload != null && fileUpload.HasFile)
         {
             strFileName = fileUpload.FileName;
             fileUpload.SaveAs(Server.MapPath("images/hardware/" + strFileName));
             TextBox txtImage = row.Cells[0].FindControl("txtImage") as TextBox;
             txtImage.Text = strFileName;
         }
    }

Так куда мне идти отсюда? Я думаю, что обновление уже произошло или что-то? Потому что "txtImage.Text" не обновляет базу данных ... Я здесь не в порядке или что-то? Я могу манипулировать значениями в текстовом поле в этой функции, прежде чем оно будет сохранено в БД, верно? Спасибо за вашу помощь в этом.

Ответы [ 2 ]

1 голос
/ 28 апреля 2009

Если вы выполняете обновление базы данных в коде позади, вы сможете получить имя файла, как вы это делали в GridView1_RowUpdating. Просто найдите строку в сетке, которая находится в режиме редактирования. Каждая строка в коллекции строк в сетке имеет свойство RowState ... вы ищете DataControlRowState.Edit

0 голосов
/ 28 апреля 2009

Я думаю, что у меня есть решение, но хотелось бы узнать, является ли это хорошим способом его кодирования. У меня есть эта настройка как событие «Обновление» для набора данных, который использует gridview:

        protected void SetRecords(object sender, SqlDataSourceCommandEventArgs e)
    {
        if (strFileName != "")
        {
            e.Command.Parameters["@Image"].Value = strFileName;
        }
    }

Это нормально? Кажется, все работает нормально ... но это хороший способ решить проблему? Я хотел бы правильно кодировать и не начинать плохие практики кодирования с самого начала (я - опытный классический разработчик ASP, переходящий на C # и ASP.NET) Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...