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
事件。你的问题就在这里。