如何在Datalist Databind之后重新加载页面

时间:2011-04-19 03:39:22

标签: c# asp.net asp.net-ajax

Asp.net与c#

我在我的页面中使用了16个datalist asp.net控件我已经以编程方式定义了每个更新的命令,如下所示:

protected void DataList1_UpdateCommand(object source,
        DataListCommandEventArgs e)
    {

        //This codes repeats for all 16 datalist , diferent naming controls such as DataList2, Datalist3, etc.....


        String categoryID = DataList1.DataKeys[e.Item.ItemIndex].ToString();
        String dp_status = ((DropDownList)e.Item.FindControl("DropDownList1")).SelectedValue;
        //String txt_dept = 


        SqlDataSource1.UpdateParameters["Id"].DefaultValue = categoryID;
        SqlDataSource1.UpdateParameters["Status"].DefaultValue = dp_status;
        // SqlDataSource1.UpdateParameters["Comment"].DefaultValue = ;
        //  SqlDataSource1.UpdateParameters["Census"].DefaultValue = ;

        SqlDataSource1.Update();

        DataList1.EditItemIndex = -1;
        DataList1.DataBind();

    }

 protected void DataList_ItemDataBound(object sender, DataListItemEventArgs e)
    {

        if (e.Item.ItemType == ListItemType.Item ||
          e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataRowView drv = (DataRowView)(e.Item.DataItem);

            string status = drv.Row["Status"].ToString();
            if (status == "Available")
                e.Item.BackColor = System.Drawing.Color.LightGreen;
            if (status == "Assigned")
                e.Item.BackColor = System.Drawing.Color.LightSteelBlue;
            if (status == "BR")
                e.Item.BackColor = System.Drawing.Color.LightSalmon;

        }

    }//End Nt1 Change Colors

问题是,一旦我更新了数据列表,我就会在其他Datalist控件中松开颜色变化.... 有什么方法可以让所有数据主义者重新绑定吗?更新任何datalist中的记录后重新加载页面?

如果我插入新行/更新令人兴奋的行,删除行意味着gridview必须自动刷新。我要做什么//?....

2 个答案:

答案 0 :(得分:0)

在回发期间,如果未调用.DataBind(),则不会重新触发ItemDataBound事件。当您从viewstate / controlstate加载项目时,没有ItemDataBound导致没有着色。

首先,我会删除你的Item_DataBound并创建一个例程,遍历每个列表并设置所需的颜色。我会在预渲染上调用它。

另一个选择是在加载页面后在客户端上使用jquery / javascript,使用样式和css做基本相同的事情。

您可能会得到希望将每个列表包装在ajax“更新面板”中的结果,但这会使您的页面膨胀并降低性能成本。

答案 1 :(得分:0)

您可以将页面的DataList部分放在更新面板中,如:

 <asp:ScriptManager runat="server"/> 

 <asp:UpdatePanel runat="server">
       <contentTemplate>

          <!--  Your content Here -->

       </contentTemplate>
 </asp:UpdatePanel>  

这绝对可以解决你的问题。