Пользовательские элементы управления asp.net связываются внутри gridview - PullRequest
1 голос
/ 20 января 2012

Здравствуйте, коллеги-программисты, здесь есть несколько проблем. Я добавляю пользовательский элемент управления в gridview. Теперь мой вопрос: как это можно связать, потому что внутри пользовательского элемента управления есть сетка, которая нуждается в CourseCatID , чтобы он мог связывать данные. И, кстати, я не могу использовать вложенный griview, потому что мне нужен рендер вложенного usercontrol для другой цели. Любой учебник / помощь будут с благодарностью.

<asp:GridView ID="grdCategory" runat="server" AutoGenerateColumns="False" Width="1100px"
                DataKeyNames="CourseCatID" Font-Names="verdana,arial,helvetica,sans-serif" Font-Size="8pt"
                CellPadding="4" ForeColor="#333333" GridLines="None">
                <Columns>
                    <asp:ButtonField Text="SingleClick" CommandName="SingleClick" Visible="False" />
                    <asp:BoundField HeaderText="CourseCatID" Visible = "false" DataField="CourseCatID" />
                    <asp:TemplateField HeaderText="Course Category">
                        <ItemTemplate>
                            <asp:Label ID="lblCourseCatID" runat="server" Visible="false" Text='<%# Eval("CourseCatID")%>'></asp:Label>
                                 <a href="javascript:toggleDiv('mydiv<%# Eval("CourseCatID")%>')">
                                 <asp:TextBox ID="txtCourseCatName" runat="server" Text='<%# Eval("CourseCatName") %>' Font-Size="XX-Small"
                            Font-Names="Verdana" Width="300px" Visible="false"></asp:TextBox>
                                <asp:Image ID="img" onclick="javascript:Toggle(this);" runat="server" ImageUrl="~/Images/minus.gif"
                                    ToolTip="Collapse" Width="7px" Height="7px" ImageAlign="AbsMiddle" /></a>
                            <asp:Label ID="lbllastname" Height="15px" runat="server" Text='<%# Eval("CourseCatName")%>'> </asp:Label>
                            <div id="mydiv<%# Eval("CourseCatID")%>">


                                <br />
                              &#160&#160&#160&#160&#160&#160<%--OnClick="ImageAdd_click" --%>
                                <asp:ImageButton ID="ImageAdd" Height="17px" ImageUrl="Images/addCourse.png" runat="server"
                                    CommandName="cmdAdd" CommandArgument='<%# Eval("CourseCatID") %>' />
                                    <br />
                                    <br />

                                    &#160&#160&#160&#160&#160&#160
                                <asp:Panel ID="pnlCourse" runat="server"></asp:Panel>
                                <b><cuc1:CourseUserControl ID="CourseUserControl1" runat="server" /></b>
                                <br />
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                <br />
                                 <br />
                                  <br />

                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>

Спасибо за ваше время

1 Ответ

3 голосов
/ 20 января 2012

У вас есть пара опций.

Самый простой - это выставить открытое свойство в пользовательском элементе управления, которое позволит вам сделать это:

<cuc1:CourseUserControl ID="CourseUserControl1" runat="server" CourseCategoryID='<%# (int)Eval("CourseCatID") %>' />

Затем связать данные с пользователемконтроль, как только это свойство назначено.Обратите внимание, что я предполагаю, что категория Int32.Например (обратите внимание, что CourseCategoryID хранит свое значение в закрытом поле, а не в ViewState):

private int _courseCategoryID;
public int CourseCategoryID
{
    get { return _courseCategoryID; }
    set
    {
        _courseCategoryID = value;

        // TODO: code that initializes the GridView in user control.

        this.DataBind();
    }
}

Другой вариант - выставить то же свойство и обработать событие RowDataBound и сделать это:

if (e.Row.RowType == DataControlType.DataRow)
{
    CourseUserControl courseDetails;
    courseDetails = (CourseUserControl)e.Row.FindItem("CourseUserControl1");

    // Assuming category ID is Int32
    courseDetails.CourseCategoryID = (int)grdCategory.DataKeys[e.Row.RowIndex].Value;
    courseDetails.DataBind();
}

Обратите внимание, что я привязываю данные вручную, а не сразу после назначения новой категории пользовательскому элементу управления в текущей строке.

Для получения дополнительной информации см .: GridView.RowDataBound Event (ASP.NET 3.5) или Событие GridView.RowDataBound (ASP.NET 4.0)

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