Первая строка DataGrid не заполняется данными DataList - PullRequest
0 голосов
/ 05 января 2012

У меня есть DataGrid с 4 столбцами и DataList с 5 столбцами. DataList находится внутри DataGrid как отдельный отдельный столбец. Все получается хорошо, за исключением того, что в первой строке таблицы данных не отображается содержимое списка данных. Как будто все в моем списке данных должно быть вытолкнуто на 1 строку для правильного отображения данных.

Я проверил (во время отладки), что данные выводятся в порядке в списке данных для соответствующей первой строки сетки данных, но они не отображаются в первой строке сетки данных. Он начинает отображаться во втором ряду таблицы данных.

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

Ниже мой код:

HTML

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="referrals.ascx.cs" Inherits="dpbrokers.dpbrokers.referrals"
    TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<div align="center">
    <asp:Label ID="errormessage" runat="server" Visible="False" /></div>
<asp:DataGrid ID="lstReferrals" runat="server" DataKeyField="ReferringAffiliateID"
    AutoGenerateColumns="false" CellPadding="4" OnItemDataBound="lstReferrals_ItemDataBound">
    <AlternatingItemStyle Font-Size="9pt" CssClass="small" BackColor="#C2D6FA"></AlternatingItemStyle>
    <ItemStyle Font-Size="9pt" CssClass="small" BackColor="White"></ItemStyle>
    <HeaderStyle Font-Size="11pt" Font-Bold="True" ForeColor="White" BackColor="#ABACAD">
    </HeaderStyle>
    <Columns>
        <asp:TemplateColumn HeaderText="Referring Affiliate">
            <ItemTemplate>
                <asp:HyperLink Text='<%# DataBinder.Eval(Container.DataItem, "ReferringAffiliateName") %>'
                    NavigateUrl='<%# EditURL("Referral",DataBinder.Eval(Container.DataItem, "ReferralID").ToString(),"Edit",0) %>'
                    runat="server" ID="Hyperlink1" />
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="SkyCard Awarded">
            <ItemTemplate>
                <asp:Label ID="itemAward" runat="server" Text='<%# IsAwarded(DataBinder.Eval(Container.DataItem, "IsAwarded").ToString()) %>' />
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:BoundColumn DataField="DSMAffiliateName" HeaderText="District Sales Manager">
        </asp:BoundColumn>
        <asp:BoundColumn DataField="DSMAffiliatePhone" HeaderText="DSM Phone"></asp:BoundColumn>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:DataList ID="DetailList" ItemStyle-CssClass="small" DataSource="<%# riReferrals %>"
                    runat="server" Width="100%">
                    <HeaderTemplate>
                        <table width="100%" cellpadding="4" border="1">
                            <tr bgcolor="#ABACAD" class="normalwhite">
                                <td width="25%">
                                    Referral Name
                                </td>
                                <td width="20%">
                                    Phone Number
                                </td>
                                <td width="30%">
                                    Email
                                </td>
                                <td>
                                    Referred On
                                </td>
                                <td>
                                    Is Member?
                                </td>
                            </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr class="small">
                            <td>
                                <asp:HyperLink Text='<%# DataBinder.Eval(Container.DataItem, "ContactName") %>' NavigateUrl='<%# EditURL("ReferralID",DataBinder.Eval(Container.DataItem, "ReferralID").ToString(),"Edit",0)  %>'
                                    runat="server" ID="Hyperlink2" />
                            </td>
                            <td>
                                <%# FormatPhone(DataBinder.Eval(Container.DataItem,"Phone").ToString()) %>
                            </td>
                            <td>
                                <%# FormatForEmail(DataBinder.Eval(Container.DataItem, "Email").ToString())%>
                            </td>
                            <td>
                                (<%# DataBinder.Eval(Container.DataItem,"Created", "{0:g}") %>)
                            </td>
                            <td>
                                (<%# IsMember(DataBinder.Eval(Container.DataItem, "JoinedON").ToString())%>)
                            </td>
                        </tr>
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:DataList>
                <div align="right">
                    <asp:ImageButton ID="Button1" CommandName="award" ImageUrl="~/images/dpbbuttons/awardbutton.gif"
                        AlternateText="Award SkyCard" runat="server" /></div>
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
    <PagerStyle Mode="NumericPages"></PagerStyle>
</asp:DataGrid>

Код позади

public ArrayList riReferrals;


            protected void Page_Load(System.Object sender, System.EventArgs e)
            {
                if (!Page.IsPostBack)
                    LoadReferrals();
            }


            private void LoadReferrals()
            {
                try
                {
                    ReferralController objReferral = new ReferralController();
                    lstReferrals.DataSource = objReferral.GetReferrals();
                    lstReferrals.DataBind();
                }
                catch (Exception ex)
                {
                    Response.Write(ex);

                    CLogError clsLogError = new CLogError(ex, Request, Session, Context.User.Identity.Name);
                    clsLogError.LogError();
                }
            }

            public void lstReferrals_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
            {

                switch (e.Item.ItemType)
                {
                    case ListItemType.Item:
                    case ListItemType.AlternatingItem:
                        lbl1 = (Label)e.Item.FindControl("itemAward");

                        GetDtlReferrals(Convert.ToInt32(lstReferrals.DataKeys[e.Item.ItemIndex]));

                        button.Visible = true;
                        if (lbl1.Text.ToLower() == "No")
                            button.Attributes.Add("onClick", "javascript:return confirm(\'Are You Sure You Wish To Award a SkyCard to this Agent ?\');");
                        else
                        {
                            button.ImageUrl = "~/images/dpbbuttons/revokebutton.gif";
                            button.Attributes.Add("onClick", "javascript:return confirm(\'Are You Sure You Wish To Revoke the SkyCard Award for this Agent ?\');");
                        }

                        break;
                }
            }

            public ArrayList GetDtlReferrals(Int32 KeyField)
            {
                riReferrals = null;

                try
                {
                    // Obtain a list of discussion messages for the module
                    ReferralController objReferral = new ReferralController();
                    riReferrals = objReferral.GetReferralsByAgentID(KeyField);
                }
                catch (Exception ex)
                {
                    Response.Write(ex);

                    CLogError clsLogError = new CLogError(ex, Request, Session, Context.User.Identity.Name);
                    clsLogError.LogError();
                }

                return riReferrals;
            }

1 Ответ

0 голосов
/ 06 января 2012

Понятно!

В метод GetDtlsReferrals я добавил следующий фрагмент кода, который выдает искомые данные дисплея:

DataList DetailList = (DataList)e.Item.FindControl("DetailList");
                    DetailList.DataBind();
...