Распечатать все страницы, разделенные разрывами страниц в ASP.NET - PullRequest
0 голосов
/ 01 октября 2018

У меня есть веб-страница с #resultsDiv, которая создается динамически в зависимости от внутреннего запроса на значение в долларах и количества, ожидаемого с помощью разрывов страниц CSS, вставленных между данными каждого номера детали.В #resultsDiv может быть очень много или несколько страниц в зависимости от фильтра, который пользователь устанавливает.Он разработан таким образом, чтобы наша команда по инвентаризации могла распечатать одну страницу на номер детали для мест на нашем складе, где они могли бы найти эту деталь.

Моя проблема в том, что когда я нажимаю кнопку, чтобы напечатать страницы в div (код ниже), он показывает только первую страницу (это единственная страница, которую я не хочу печатать).И наоборот, если я щелкну правой кнопкой мыши и напечатаю, все страницы будут доступны для печати. ​​

Я прочитал эти вопросы SO и попробовал большинство их решений безрезультатно: window.print () не печатает всю страницу

window.print () печатает только «видимую» часть экрана

ScriptManager.RegisterStartupScript codeне работает - почему?

Я также попробовал кое-что из предложенного здесь:

Расширенная печать CSS - Использование разрывов страниц CSS

Для справки вот запись MSDN для ScriptManager:

Метод ScriptManager.RegisterStartupScript

Вот обработчик нажатия:

    protected void btnPrint_OnClick(object sender, EventArgs e)
    {
        if (!(ViewState["PartsToPrint"] is DataTable dt)) return;
        DataView dv = new DataView(dt);
        DataTable dtDistinctPartNumbers = dv.ToTable(true, "partNumber");
        foreach (DataRow row in dtDistinctPartNumbers.Rows)
        {
            //pull out the data as needed from the datatable rows
            string partNumber = row["partnumber"].ToString();
            if (!dbf.IncrementPrintCount(GetSelectedOrganization(), partNumber))
            {
                setStatus(false, "Error saving print count");
            }
        }
        ScriptManager.RegisterStartupScript(resultsDiv, GetType(), resultsDiv.UniqueID, "window.print();", true);
    }

У меня также естьпробовал:

ScriptManager.RegisterStartupScript(this, typeof(Page), "Print", "window.print();", true);

ScriptManager.RegisterStartupScript(resultsDiv, typeof(Page), "Print", "window.print();", true);

И другие варианты, включая селектор Panel (div) для рендеринга ASP (см. CSS ниже), так что у меня заканчиваетсяидей.

Вот соответствующий CSS:

@media print {
    body, html, #wrapper, #resultsDiv, 
#ContentPlaceHolder1_resultsDiv {
        height: 100%;
        width: 100%;
    }
    p.pagebreakhere {
        display: block;
        page-break-before: always;
    }
}

Мне нужно событие click, чтобыя должен напечатать все страниц, а не только первую страницу.Возможно, проще говоря, дайте мне точно такой же диалог, который я получаю, щелкнув правой кнопкой мыши и Распечатать.Чего мне не хватает?

1 Ответ

0 голосов
/ 01 октября 2018

Что ж, это оказалось легко, если у вас все в порядке с написанием кода на стороне клиента (я в порядке с этим решением).

На странице .aspx измените:

<asp:Button runat="server" ID="btnPrint" OnClick="btnPrint_OnClick" Text="Print for recount"/> 

Кому:

<asp:Button runat="server" ID="btnPrint" OnClick="btnPrint_OnClick" Text="Print for recount" OnClientClick="javascript:window.print();"/>

Появляется диалоговое окно «Щелчок правой кнопкой мыши» и «Печать», которое позволяет пользователю распечатать все страницы, и событие OnClick по-прежнему выполняется, чтобы выполнить внутреннее обновлениеколичество подсчетов.

Возможно, есть более элегантное решение, но у меня ограниченные временные рамки (инвентаризация закончится на этой неделе), поэтому я готов двигаться дальше с этим решением.

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