Пытаетесь использовать выгрузку файлов в Listview? Обновление не работает - PullRequest
0 голосов
/ 29 марта 2020

Вот мой ListView. Я использую OnItemCommand для ссылки на код в коде позади. Здесь я пытаюсь обновить базу данных с помощью нового FileUpload элемента управления.

 <%--Listview--%>
<asp:ListView runat="server" ID="livLocation" class="container"
    DataKeyNames="LocationID"
    DataSourceID="sdsListViewLocation"
    EmptyDataText="No data to display"
    InsertItemPosition="FirstItem"
    OnItemInserted="livLocation_ItemInserted"
    OnItemUpdated="livLocation_ItemUpdated"
    OnItemDeleted="livLocation_ItemDeleted"
    OnItemCanceling="livLocation_ItemCanceling"
    OnItemCommand="livLocation_ItemCommand">
</asp:ListView>

Insert работает отлично. При выполнении Update для всех FindControls выдается ошибка Null. Я считаю, что по какой-то причине FindControls не работает для Update . Я пытался присвоить каждому элементу управления свои идентификаторы, но это все равно не решило проблему. Я ссылался на этот пост, но пока ничего не помогло: Загрузка изображений с помощью fileupload в Listview asp. net

 protected void livLocation_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        //
        if (e.CommandName == "Insert")
        {
            // Find controls on insert.
            TextBox txtLocation = (TextBox)livLocation.InsertItem.FindControl("txtLocation");
            TextBox txtImage = (TextBox)livLocation.InsertItem.FindControl("txtImage");
            FileUpload fuiImage = (FileUpload)livLocation.InsertItem.FindControl("fuiImage");

            // Get today's date
            String strDate = DateTime.Now.ToString("MM-dd-yyyy-h-m-stt");

            // If file is there to upload.
            if (fuiImage.HasFile)
            {
                // Set path.
                String strFileName = txtLocation.Text + "-" + strDate + ".jpg";
                String strPath = Request.PhysicalApplicationPath + "Image\\Location\\" + strFileName;

                // Save file.
                fuiImage.SaveAs(strPath);

                // Fill Image textbox
                txtImage.Text = strFileName;
            }
            else
            {
                // Do nothing
            }
        }
        else if (e.CommandName == "Update")
        {
            // Find controls on insert.
            TextBox txtLocation = (TextBox)livLocation.InsertItem.FindControl("txtLocation");
            TextBox txtImage = (TextBox)livLocation.InsertItem.FindControl("txtImage");
            FileUpload fuiImage = (FileUpload)livLocation.InsertItem.FindControl("fuiImage");

            // Get today's date
            String strDate = DateTime.Now.ToString("MM-dd-yyyy-h-m-stt");

            // If file is there to upload.
            if (fuiImage.HasFile)
            {
                // Set path.
                String strFileName = txtLocation.Text + "-" + strDate + ".jpg";
                String strPath = Request.PhysicalApplicationPath + "Image\\Location\\" + strFileName;

                // Save file.
                fuiImage.SaveAs(strPath);

                // Fill Image textbox
                txtImage.Text = strFileName;
            }
            else
            {
                // Do nothing
            }
        }
        else if (e.CommandName == "Delete")
        {
            // Delete file.
            FileUpload fuiImage = (FileUpload)livLocation.InsertItem.FindControl("fuiImage");
            String strPath = Request.PhysicalApplicationPath + "Image\\Location\\" + fuiImage.FileName;

            System.IO.File.Delete("strPath");

        }
        else
        {
            // Do nothing
        }
    }
}

1 Ответ

1 голос
/ 29 марта 2020

Как уже говорилось, всегда лучше использовать объект отправителя для лучшей поддержки в дальнейшем. по вашей проблеме, пожалуйста, перейдите по следующей ссылке, чтобы получить отредактированный элемент, так как ваш синтаксис неверен: https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.listview.itemediting?view=netframework-4.8

он показывает более подробную информацию о редактировании элемента и о том, как получить отредактированный элемент с помощью новый индекс редактирования.


(TextBox)livLocation.InsertItem неверно, оно должно быть EditItem, поэтому оно будет (FileUpload)(sender as ListView).EditItem.FindControl.....

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