Нажатие кнопки вытягивает неправильную таблицу данных для экспорта в Excel - PullRequest
0 голосов
/ 10 июля 2020

Я беру данные расписания компании из веб-API и форматирую данные, чтобы их можно было аккуратно отобразить на локальном сайте, а также можно было экспортировать в шаблон Excel для распространения по всей компании. Мы добавили кнопку в нижней части сайта для отображения расписания на предыдущие недели и еще одну для экспорта данных в Excel. При нажатии кнопки «Предыдущая неделя» эта же таблица Gridview1 заполняется данными за последние недели. Но когда я нажимаю кнопку экспорта, он экспортирует данные за текущую неделю в Excel.

Вот часть моего кода, дайте мне знать, что еще мне нужно опубликовать для помощи.

Таблица данных устанавливается при загрузке страницы в gridview:

protected void Page_Load(object sender, EventArgs e)
        {

// ..... bunch of code above to call web API for date range and format table....

            DataView view = table.AsDataView();
            view.Sort = "Sort ASC";

            GridView1.DataSource = view;
            GridView1.DataBind();

            if (GridView1.Columns.Count > 0)
                GridView1.Columns[8].Visible = false;
            else
            {
                GridView1.HeaderRow.Cells[8].Visible = false;
                foreach (GridViewRow gvr in GridView1.Rows)
                {
                    gvr.Cells[8].Visible = false;
                }
            }

, и gridview извлекается в таблицу данных и отправляется в электронную таблицу Excel

protected void ExportExcel(object sender, EventArgs e)
        {
            DataTable dt = new DataTable("Resident Schedule");
            foreach (TableCell cell in GridView1.HeaderRow.Cells)
            {
                dt.Columns.Add(cell.Text);
            }
            foreach (GridViewRow row in GridView1.Rows)
            {
                dt.Rows.Add();
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    dt.Rows[dt.Rows.Count - 1][i] = row.Cells[i].Text;
                }
            }
            dt.Columns.Remove("Rotation");
            dt.Columns.Remove("Sort");

            using (XLWorkbook wb = new XLWorkbook(@"C:\template.xlsx"))
            {
                IXLWorksheet ws = wb.Worksheet("Resident Schedule");
                var rangeWithStrings = ws.Cell(5, 2).InsertTable(dt.AsEnumerable(), false);

// ..... bunch of code below

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

protected void PreviousWeek(object sender, EventArgs e)
        {

// ..... bunch of code above to pull and sort last weeks schedule....

            DataView view = table.AsDataView();
            view.Sort = "Sort ASC";

            GridView1.DataSource = view;
            GridView1.DataBind();

            if (GridView1.Columns.Count > 0)
                GridView1.Columns[8].Visible = false;
            else
            {
                GridView1.HeaderRow.Cells[8].Visible = false;
                foreach (GridViewRow gvr in GridView1.Rows)
                {
                    gvr.Cells[8].Visible = false;
                }
            }

Итак, мой вопрос: если нажатие кнопки повторно заполняет данные GridView1, почему метод ExportExcel возвращается к данным загрузки страницы?

1 Ответ

0 голосов
/ 10 июля 2020

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

if (!IsPostBack)
{
     // GridView Populate code
}
...