Файл не загружается из GridView по событию клика

У меня есть GridView с именем gvEmplAttachments, который имеет 3 столбца:

  • Я бы
  • Имя файла
  • Путь файла

Каждый ряд имеет LinkButton это позволит пользователю загрузить файл, эта кнопка закодирована так:

<asp:LinkButton  id="lbViewFile" runat="server" CommandName="ViewFile" CommandArgument='<%# Container.DataItemIndex %>' >View</asp:LinkButton>

GridView установлен со следующим:

OnRowCommand ="gvEmplAttachments_OpenAttachment_RowCommand"

Так что он будет выполнять функцию в CodeBehind


В моем CodeBehind у меня есть эта функция:

protected void gvEmplAttachments_OpenAttachment_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "ViewFile")
    {
        //Get rowindex
        int rowindex = Convert.ToInt32(e.CommandArgument);
        //Get the Row
        GridViewRow gvr = gvUaSettings.Rows[rowindex];
        //Get the Needed Values
        Label lblPath = gvr.FindControl("lblFilePath") as Label;
        Label lblName = gvr.FindControl("lblFileName") as Label;
        //String The values
        string fileName = lblName.Text;
        string filePath = Server.MapPath(lblPath.Text);
        //Should Download the file
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "application/x-unknown";
        response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
        response.TransmitFile(filePath);
        response.Flush();
        response.End();
    }
}

Но проблема в том, что когда я нажимаю кнопку, я получаю эту ошибку:

В экземпляре объекта не задана ссылка на объект

У меня вопрос, что я пропускаю, что приведет к нулевому значению. Потому что Grid отображает правильные FileName и FilePath.

1 ответ

Решение

Как вы упомянули, ваш идентификатор Gridview - это gvEmplAttachments, но код, который вы написали для захвата строки Gridview, запускающей событие OnCommand, имеет другой идентификатор Gridview. GridViewRow gvr = gvUaSettings.Rows[rowindex];,

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

GridViewRow gvr = gvEmplAttachments.Rows[rowindex];

Другие вопросы по тегам