我希望有人可以提供帮助!我有一个具有gridview的用户控件(UC中有一个更新面板)
我在2个不同的页面上使用此UC - 在两个页面上,UC都位于选项卡(ajax tabpanel)上,选项卡位于更新面板内。
在1页上,当我使用.DataBind()(不是初始加载)时,它会触发RowDataBound事件并正确完成网格。
但是在第2页(相同的代码!!)上,.DataBind不会触发RowDataBound事件,也不会绑定/刷新数据源。任何想法为什么会这样?
答案 0 :(得分:2)
RowDataBound事件仅在回发期间GridView的数据发生更改时触发。事件因速度而短路,因此不会不必要地重新生成完全相同的数据。使用RowCreated事件来操纵HTML - 无论数据是否已更改,它都会在每次回发时触发。
答案 1 :(得分:0)
首先检查您是否启用了缓存(在服务器上)。我还会使用断点来跟踪应用程序是否完全进入Page_Load事件。
如果启用了缓存,浏览器将缓存而不使用Page_Load,因此不使用DataBind()。
希望这会有所帮助
答案 2 :(得分:0)
我已经通过放置代码行解决了问题
(TabContainer1_ActiveTabChanged(TabContainer1, null);)
在Page_Load
事件中,而不是!IsPostback
事件
protected void Page_Load(object sender, EventArgs e)
Page.Title = ConfigurationManager.AppSettings["PageTitle"].ToString().Trim() + " Project Type";
if (!IsPostBack)
{
if (Request.Params["stidx"] != null && Request.Params["stidx"].ToString().Trim() != "")
{
if (Request.Params["stidx"].ToString().Trim() == "0") //have to make project type selected in left
{
NullAllDate_Except_ProjectType();
TabContainer1.ActiveTabIndex = 0;
LeftBar.var_data_to_show = "";
}
else if (Request.Params["stidx"].ToString().Trim() == "1") //have to make Modules selected in left
{
NullAllDate_Except_Module();
TabContainer1.ActiveTabIndex = 1;
LeftBar.var_data_to_show = "";
}
else if (Request.Params["stidx"].ToString().Trim() == "2") //have to make Activity selected in left
{
NullAllDate_Except_Activity();
TabContainer1.ActiveTabIndex = 2;
LeftBar.var_data_to_show = "";
}
else if (Request.Params["stidx"].ToString().Trim() == "3") //have to make Systems selected in left
{
NullAllDate_Except_Systems();
TabContainer1.ActiveTabIndex = 3;
LeftBar.var_data_to_show = "";
}
else if (Request.Params["stidx"].ToString().Trim() == "4") //have to make Module Headers selected in left
{
NullAllDate_Except_ModuleHeaders();
TabContainer1.ActiveTabIndex = 4;
LeftBar.var_data_to_show = "";
}
else
{
NullAllDate_Except_ProjectType();
LeftBar.var_data_to_show = "";
}
}
else
{
NullAllDate_Except_ProjectType();
LeftBar.var_data_to_show = "";
}
}
if (IsPostBack)
{
if (MyScriptManager.IsInAsyncPostBack)
{
//LeftBar.var_data_to_show = true;
LeftBar.var_data_to_show = GetModuleName(TabContainer1.ActiveTabIndex.ToString());
}
}
TabContainer1_ActiveTabChanged(TabContainer1, null); //this is required here, otherwise onrow databound is not working on !Postback
}