Как скопировать копию ASP.NET GridView в буфер обмена

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

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


person Since_2008    schedule 15.12.2010    source источник
comment
Удачи. Даже Google не может понять это правильно в Документах Google. Если Google с их чудовищными бюджетами не может все исправить, почему вы думаете, что можете?   -  person Erik Funkenbusch    schedule 16.12.2010


Ответы (3)


Вот код, который поможет вам, ребята, поместить данные представления сетки в буфер обмена, который позволяет вставлять их в 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>");
person Since_2008    schedule 26.01.2011

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

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

person spender    schedule 15.12.2010

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

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

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

person The Muffin Man    schedule 15.12.2010