Asp.net 数据绑定无法更改UpdatePanel中GridView中自定义控件的值

Asp.net 数据绑定无法更改UpdatePanel中GridView中自定义控件的值,asp.net,vb.net,webforms,asp.net-ajax,aspxgridview,Asp.net,Vb.net,Webforms,Asp.net Ajax,Aspxgridview,我正在UpdatePanel中创建一个GridView,如下所示: <asp:ScriptManager runat="server" EnablePartialRendering="true" /> <div id="masterHistoryDialog" style="display: none"> <asp:UpdatePanel runat="server" ChildrenAsTriggers="true" UpdateMode="Always

我正在
UpdatePanel
中创建一个
GridView
,如下所示:

<asp:ScriptManager runat="server" EnablePartialRendering="true" />

<div id="masterHistoryDialog" style="display: none">
    <asp:UpdatePanel runat="server" ChildrenAsTriggers="true" UpdateMode="Always">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="historyRepeater" EventName="PageIndexChanging" />
        </Triggers>
        <ContentTemplate>
            <asp:GridView ID="historyRepeater" AutoGenerateColumns="false" runat="server" AllowPaging="true" AllowSorting="false" PagerSettings-NextPageText="Next" PagerSettings-PreviousPageText="Previous" PageSize="4" OnPageIndexChanging="historyRepeater_PageIndexChanging">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <uc:CustomCalendarControl ChangeID='<%# DataBinder.Eval(Container.DataItem, "Item1") %>' ScheduleID='<%# DataBinder.Eval(Container.DataItem, "Item2") %>' runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
CustomCalendarControl
是一个自定义控件

我确认
GetSchedules
实际上正在获取我的整个数据集

我对数据进行分页,每页有4个自定义控件(5页共20项)。第一页工作正常。但是,当我尝试导航到另一个页面时,自定义控件的初始化失败,因为它没有获得
ChangeID
ScheduleID
的实际值-它们总是0

调用
DataBind()
时失败,因为自定义控件的初始化取决于
ChangeID
ScheduleID
是实际的ID


如何解决此问题?

您的问题必须在嵌套的用户控件填充其客户端内容时解决。这首先发生在控件上,然后发生在GridView上,因此在设置
ChangeID
ScheduleID
的值之前,已经构建了UserControl

解决此问题的一种方法是从父控件手动调用控件的构建

首先,修改UserControl,使其具有正确显示值的公共函数

public string ChangeID { get; set; }
public string ScheduleID { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
    setUCValues();
}

public void setUCValues()
{
    Label1.Text = ChangeID;
    Label2.Text = ScheduleID;
}


Public Property ChangeID As String
    Get
    End Get
    Set
    End Set
End Property

Public Property ScheduleID As String
    Get
    End Get
    Set
    End Set
End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    setUCValues
End Sub

Public Sub setUCValues()
    Label1.Text = ChangeID
    Label2.Text = ScheduleID
End Sub
接下来,向GridView中的UserControl添加一个
ID

<uc:CustomCalendarControl ID="calendarControl" runat="server" ChangeID=

问题在于嵌套的用户控件何时填充其客户端内容。这首先发生在控件上,然后发生在GridView上,因此在设置
ChangeID
ScheduleID
的值之前,已经构建了UserControl

解决此问题的一种方法是从父控件手动调用控件的构建

首先,修改UserControl,使其具有正确显示值的公共函数

public string ChangeID { get; set; }
public string ScheduleID { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
    setUCValues();
}

public void setUCValues()
{
    Label1.Text = ChangeID;
    Label2.Text = ScheduleID;
}


Public Property ChangeID As String
    Get
    End Get
    Set
    End Set
End Property

Public Property ScheduleID As String
    Get
    End Get
    Set
    End Set
End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    setUCValues
End Sub

Public Sub setUCValues()
    Label1.Text = ChangeID
    Label2.Text = ScheduleID
End Sub
接下来,向GridView中的UserControl添加一个
ID

<uc:CustomCalendarControl ID="calendarControl" runat="server" ChangeID=

有没有办法让
DataBind()
调用成功?不幸的是,这似乎无法解决问题。有不同的方法吗?数据绑定成功了。这是导致您出现问题的页面生命周期。首先触发用户控件的页面加载,然后触发
PageIndexChanging
事件。问题就在这里。有没有办法让
DataBind()
调用成功?不幸的是,这似乎无法解决问题。有不同的方法吗?数据绑定成功了。这是导致您出现问题的页面生命周期。首先触发用户控件的页面加载,然后触发
PageIndexChanging
事件。你的问题就在这里。