GridView .DataBind RowDataBound没有触发

时间:2009-01-23 21:10:24

标签: gridview data-binding

我希望有人可以提供帮助!我有一个具有gridview的用户控件(UC中有一个更新面板)

我在2个不同的页面上使用此UC - 在两个页面上,UC都位于选项卡(ajax tabpanel)上,选项卡位于更新面板内。

在1页上,当我使用.DataBind()(不是初始加载)时,它会触发RowDataBound事件并正确完成网格。

但是在第2页(相同的代码!!)上,.DataBind不会触发RowDataBound事件,也不会绑定/刷新数据源。任何想法为什么会这样?

3 个答案:

答案 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
}