Как скопировать копию ASP.NET GridView в буфер обмена - PullRequest
2 голосов
/ 16 декабря 2010

У кого-нибудь есть решение / ссылка для копирования содержимого GridView / Datatable (веб-приложения aspx) в буфер обмена, чтобы я мог вставить его в Excel?

Я пробовал искать, но нашел толькорешения для приложения Forms.

Ответы [ 3 ]

1 голос
/ 26 января 2011

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

ClientScriptManager csm;
StringBuilder sb;
string stringToAppend;
int currentPage;

csm = Page.ClientScript;
sb = new StringBuilder();

// headers
foreach (DataControlField dcf in gvClass.Columns)
{
    sb.Append(dcf.HeaderText + "\t");
}

sb.Append("\\n");
currentPage = gvClass.PageIndex;

for (int i = 0; i < gvClass.PageCount; i++)
{
    gvClass_PageIndexChanging(null, new GridViewPageEventArgs(i));

    foreach (GridViewRow gvr in gvClass.Rows)
    {
        foreach (TableCell tc in gvr.Cells)
        {
            if (tc.Controls.Count > 0)
            {
                stringToAppend = ((LinkButton)tc.Controls[0]).Text;
                sb.Append(PRTL_UtilityPackage.FormatHtmlCharacters(stringToAppend) + " \t");
            }
            else
            {
                stringToAppend = tc.Text;
                sb.Append(PRTL_UtilityPackage.FormatHtmlCharacters(stringToAppend) + " \t");
            }   
        }
        sb.Append("\\n");
    }
}

gvClass_PageIndexChanging(null, new GridViewPageEventArgs(currentPage));

// Javascript that sets the clipboard to the stringbuilders value
csm.RegisterClientScriptBlock(typeof(Page), "copy",
"<script language=\"javascript\" type=\"text/javascript\"> " +
"window.clipboardData.setData(\"Text\", \"" + sb.ToString() + "\"); " +
"</script>");
0 голосов
/ 16 декабря 2010

Похоже, вы не понимаете вид сетки.Это не имеет ничего общего с тем, что вы описываете.Вы должны Google, как экспортировать данные, чтобы преуспеть с C #.Вы можете создать ссылку или кнопку с надписью «загрузить файл Excel», и кнопка будет привязана к вашему методу c #.Если вы используете этот метод на своем веб-сайте, вы можете сделать это один раз и, возможно, сделать так, чтобы он использовал параметр, чтобы выяснить, какую таблицу базы данных он экспортирует в Excel.

Ps В случае, если вы ищете больше функциональности, чем gridviewЯ предлагаю вам взглянуть на мой ответ на этот пост о создании собственного. Как показать всплывающее меню из базы данных в виде сетки для каждого элемента строки сетки?

Вам действительно необходимо скопировать это в буфер обмена?Возможно, это можно сделать, но это займет много времени.Вы говорите о вставке данных в несколько полей, а не в одно поле.Я полагаю, вам нужно создать расширение для Excel, которое будет знать, что данные буфера обмена взяты из таблицы базы данных, и выяснить, как заполнять лист.

0 голосов
/ 16 декабря 2010

Единственный надежный способ скопировать данные в буфер обмена - использовать Flash Player.Вот начало:

http://beckelman.net/post/2009/01/22/Copy-to-Clipboard-with-ZeroClipboard-Flash-10-and-jQuery.aspx

...