Как реализовать пользовательский серверный элемент управления C #? - PullRequest
1 голос
/ 03 декабря 2009

Я пытаюсь реализовать пользовательский элемент управления, используя класс RowClickableGridView, предоставленный в этой публикации переполнения стека . Это первый раз, когда я пытался создать собственный серверный элемент управления и следовал инструкциям, изложенным в этом пошаговом руководстве по MSDN .

У меня есть класс RowClickableGridView в каталоге App\_Code моего проекта веб-приложений с пространством имен MyWebApplication.App\_Code, и он компилируется.

Моя проблема в том, что страница .aspx, на которой я пытаюсь использовать элемент управления, не распознает префикс тега. На странице также есть многочисленные предупреждения о неподдерживаемых элементах между тегами cc1:GridViewRowClickable. Я думал, что у меня есть все на месте в соответствии с прохождением MSDN.

Фрагмент кода

<%@ Page Title="MyPage" Language="C#" MasterPageFile="~/MyMaster.master" AutoEventWireup="true" Inherits="MyPage" Codebehind="MyPage.aspx.cs" %>
<%@ Register TagPrefix="cc1" TagName="RowClickableGridView" Namespace="MyWebApplication.App_Code" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" SelectCommand="MySpName" SelectCommandType="StoredProcedure">
    </asp:SqlDataSource>
    <cc1:RowClickableGridView ID="GVW_test" runat="server" DataSourceID="SqlDataSource1">
        <HeaderStyle CssClass="ListTop" />
        <RowStyle CssClass="RowHighlight" />
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="Atr_ID" SortExpression="Atr_ID" />
            <asp:BoundField HeaderText="Name" DataField="Atr_Name" SortExpression="Atr_Name" />
        </Columns>
        <EmptyDataTemplate>
            No Data
        </EmptyDataTemplate>
   </cc1:RowClickableGridView>
</asp:Content>

Есть идеи о том, что я делаю неправильно, или предложения о том, что делать дальше?

Ответы [ 2 ]

4 голосов
/ 03 декабря 2009

Вы указали «RowClickableGridView» в качестве TagName, но вы используете «GridViewRowClickable» в коде.

1 голос
/ 04 декабря 2009

Я наконец-то получил его на работу. Я выбрал другой подход.

  1. Создание нового проекта управления сервером ASP.NET
  2. Скопировать класс в файл cs по умолчанию и переименовать пространство имен.
  3. Добавить тег TagPrefix по умолчанию к строке над объявлением пространства имен.
    [assembly: TagPrefix("mynamespace", "mycustomtag")]
  4. Добавить ToolBoxData в строку выше скопированного класса.
    [ToolboxData("<{0}:GridViewRowClickable runat=server></{0}:GridViewRowClickable>")]
  5. Сборка проекта в dll
  6. Скопировать dll в каталог bin веб-приложения
  7. Ссылка dll в проекте веб-приложения
  8. Добавление элементов управления на панель инструментов путем добавления создания нового элемента панели инструментов из библиотеки DLL
  9. Перетащите элемент управления из панели инструментов на страницу aspx

Это добавляет соответствующую директиву Register вверху страницы aspx и исправляет все предупреждения, которые я получил. Автозаполнение также работает в этом случае.

Ниже приведен код.

<%@ Page Title="" Language="C#" MasterPageFile="~/MyMaster.master" AutoEventWireup="true" Inherits="MyPage" Codebehind="MyPage.aspx.cs" %>
<%@ Register Assembly="GridViewRowClickable" Namespace="CustomServerControls" TagPrefix="MyTag" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:SqlDataSource ID="Sql_MyTable" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
        SelectCommand="spTbl_Select" SelectCommandType="StoredProcedure">
    </asp:SqlDataSource>
    <egcc:GridViewRowClickable ID="GridViewRowClickable_test" runat="server" 
        DataSourceID="Sql_MyTable" DataKeyNames="tbl_id"
        AllowSorting="True" AutoGenerateColumns="False" GridLines="None" PageSize="25" Width="100%"
        EnableRowClickSelection="true" RowClickCommand="Select" OnSelectedIndexChanged="GridViewRowClickable_test_OnSelectedIndexChanged">
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="tbl_id" SortExpression="tbl_id" />
            <asp:BoundField HeaderText="Name" DataField="tbl_name" SortExpression="tbl_name" />
        </Columns>
        <EmptyDataTemplate>
            No Data.
        </EmptyDataTemplate>
    </egcc:GridViewRowClickable>
</asp:Content>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...