Search code examples
sharepointsharepoint-2010alertbanner

How to call SP.UI.Status in visual webpart


I have a scenario where i need to display an Alert banner with the title column in my list.

Below is the code which iam trying to use . But it is not displaying correctly. Can any one let me know Errorl

<script type="text/ecmascript" language="ecmascript">

    var strStatusID;

    function showInfo(strMessage) {
        alert("Code sucess");
        strStatusID = SP.UI.Status.addStatus(strMessage, true);
        alert(strMessage.toString());
        SP.UI.Status.setStatusPriColor(strStatusID, "yellow");

    }




</script>
<asp:Panel ID="Panel1" runat="server">

<asp:Label ID="lblScripter" runat="server" Visible="false"></asp:Label>

</asp:Panel>


  public void LoadGrid()
        {
            //System.Diagnostics.Debugger.Break();

            var oSPWeb = SPContext.Current.Web;
            SPList oSpList = oSPWeb.Lists["AlertList"];
            SPQuery oQuery = new SPQuery();
            oQuery.Query = @"<Where><Neq><FieldRef Name='NoOfDays' /><Value Type='Calculated'>0:00</Value></Neq></Where>";
            SPListItemCollection _AlertListCollection = oSpList.GetItems(oQuery);
            DataTable Table_Calendar = _AlertListCollection.GetDataTable();

            if (Table_Calendar != null)
            {

                foreach (SPListItem item in _AlertListCollection)
                {

                    MessageShow = item["Title"].ToString();

                }


               // strStatusID = SP.UI.Status.addStatus(strMessage, true);
                lblScripter.Text = "<Script language='javascript;>showInfo('" + MessageShow + "');</script>";
            }


            else
            {
                lblScripter.Visible = false;


            }

        }

<asp:Timer runat="server" ID="UpdateTimer" Interval="6000" OnTick="UpdateTimer_Tick" />
    <asp:UpdatePanel runat="server" ID="TimedPanel" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="UpdateTimer" EventName="Tick" />
        </Triggers>
        <ContentTemplate>
            <asp:Label runat="server" ID="DateStampLabel" />
              <asp:Label ID="lblScripter" runat="server"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
     protected void UpdateTimer_Tick(object sender, EventArgs e)
            {
                System.Diagnostics.Debugger.Break();
                DateStampLabel.Text = DateTime.Now.ToString();
                DateTime Currenttime = DateTime.Parse(DateStampLabel.Text.ToString());

                var oSPWeb = SPContext.Current.Web;
                SPList oSpList = oSPWeb.Lists["Alertlist"];
                SPQuery oQuery = new SPQuery();
                oQuery.Query = @"<Where><Neq><FieldRef Name='NoOfDays' /><Value Type='Calculated'>0:00</Value></Neq></Where>";
                SPListItemCollection _AlertListCollection = oSpList.GetItems(oQuery);
                DataTable Table_Calendar = _AlertListCollection.GetDataTable();

                if (Table_Calendar != null)
                {

                    foreach (SPListItem item in _AlertListCollection)
                    {

                        MessageShow = item["Title"].ToString();
                        Enddate = DateTime.Parse(item["EndDate"].ToString());
                    }



                    lblScripter.Text = @"<script type=""text/javascript"">SP.SOD.executeOrDelayUntilScriptLoaded(function() {showInfo('" + MessageShow + "');}, 'sp.js');</script>";

                    if (Currenttime >= Enddate)
                    {

                        lblScripter.Text = "hi after date tim refreshed";
                        lblScripter.Text = @"<script type=""text/javascript"">SP.SOD.executeOrDelayUntilScriptLoaded(function() {removeAllInfos();}, 'sp.js');</script>";

                    }

                }


                //else
                //{
                //    lblScripter.Visible = false;


                //}



            }

Solution

  • Try to set :

     lblScripter.Text = @"<script type=""text/javascript"">SP.SOD.executeOrDelayUntilScriptLoaded(function() {showInfo('" + MessageShow + "');}, 'sp.js');</script>"
    

    Most likely this will solve your problem of calling the SP.UI.Status javascript functions before they have been loaded.