Получение столбцов Xml из LinqDataSource для отображения в GridView - PullRequest
1 голос
/ 26 июля 2010

У меня есть LinqDataSource и GridView, отображающий таблицу.Столбцы типа xml не отображаются.Я бы хотел, чтобы они отображали что-то подобное в выходных данных запросов Sql Server со ссылкой для отображения активируемого XML, хотя может быть другой подход, который я не рассматриваю (возможно, стилизованное отображение данных XML и т. Д.).Две вещи, которые я хотел бы знать, как это сделать

  • Во-первых, преобразуйте xml в строку и отобразите его в таблице.Может быть, первые 30 символов.
  • Наконец, введите xml во что-нибудь полезное, например, кликабельную ссылку, чтобы отобразить полный xml, вложенную таблицу или введенную строку.

Таким образом, следующее работает, и отображает симпатичную таблицу со ссылками редактирования и удаления.Но поля XML отсутствуют.Как бы вы добавили поддержку полей Xml?

<form id="form1" runat="server">
<div>
    <asp:LinqDataSource ID="OrdersDataSource"
        OnContextCreating="LinqDataSource_ContextCreating"
        runat="server" ContextTypeName="MyDbDataContext"
        EnableUpdate="True" TableName="orders"
        EnableDelete="true"
        OrderBy="Status, UserId">
    </asp:LinqDataSource>
    <asp:GridView ID="OrdersGridView" DataSourceID="OrdersDataSource"
        CssClass="gridview" PageSize="30" AutoGenerateDeleteButton="true"
        AutoGenerateEditButton="true" AllowPaging="True" AllowSorting="True"
        AlternatingRowStyle-BackColor="Beige" DataKeyNames="OrderId"
        runat="server" Width="705px">
        <Columns>
        </Columns>
    </asp:GridView>
</div>
</form>

В данный момент Page_Load пуст.

1 Ответ

0 голосов
/ 29 июля 2010

Наилучшим подходом было бы использование события GridView RowDataBound.Это выглядело бы примерно так:

protected void OrdersGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var dataItem = e.Row.DataItem;
        ...
    }
}

Я не уверен, какой тип dataItem, но, вероятно, вы можете привести его к типу вашего заказа (это проще всего увидеть в отладчике, просто установитеточка останова в обработчике событий RowDataBound).Вы должны быть в состоянии получить ваши данные XML из этого объекта.Если у вас есть данные XML, вы можете преобразовать их в строку и получить, например, первые 30 символов.

Последнее, что нужно сделать, - установить этот текст в правильную ячейку.См. Пример на MSDN .

...