0

4 列の DataGrid と 5 列の DataList があります。DataList は、DataGrid 内に別の別の列として存在します。データグリッドの最初の行にデータリストの内容が表示されないことを除いて、すべてうまくいきます。データを正しく表示するには、データリスト内のすべてを 1 行ずつ押し上げる必要があるかのようです。

データグリッドの対応する最初の行のデータリストでデータが正常に出力されることを (デバッグ中に) 検証しましたが、データグリッドの最初の行にレンダリングされません。データグリッドの 2 行目でレンダリングが開始されます。

私はマークアップとコードビハインドでこれを何度も経験しましたが、なぜこれが起こっているのかわかりません。どんな助けでも大歓迎です。

以下は私のコードです:

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;
            }
4

1 に答える 1

0

とった!

GetDtlsReferralsメソッドで、探していた表示データを生成する次のコードスニペットを追加しました。

DataList DetailList = (DataList)e.Item.FindControl("DetailList");
                    DetailList.DataBind();
于 2012-01-05T22:12:37.383 に答える