views:

753

answers:

1

Is there a way to trigger a GridView rebind from an html markup page using jQuery or jscript?

I have an ActiveX download control which passes all events via jscript.

So, a have a download complete event on the markup page but not the code behind.

Thank you,

James

Here is the main aspx page:

 <script type="text/javascript">
        function FileDownloader_DownloadStep(Step){
        //The file list is going to be downloaded - "2 = About to Start" 
        if (Step == 2){
         //Dynamically build the filelist for the downloader
         getFileDownloader("FileDownloader").setFileList("GetFileList.aspx");
     }
     //The user has confirmed the download - "6 = File Download About to Start"
     if (Step == 6){
         //Perform the initialization updates to the first file only
         var xmlhttp; 
            if (typeof XMLHttpRequest != 'undefined') { 
                xmlhttp = new XMLHttpRequest(); 
            } 
            if (!xmlhttp) { 
                throw "Browser doesn't support XMLHttpRequest."; 
            } 
            var data = ""; 
            xmlhttp.open("POST", "UpdateVideoInitiated.aspx", true); 
            //Send the proper header information along with the request 
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
             //xmlhttp.setRequestHeader("Content-length", data.length); 
            xmlhttp.setRequestHeader("Connection", "close"); 
            xmlhttp.send(data); 
     }
    }
        function onDownloadItemComplete(Result, ErrorPage, Url, FileName, ContentType, FileSize){
            var xmlhttp;
            var data;

            //The handler will display the error description or updates as noted
            switch (Result){
                        //Update the completed file as complete and then perform initialization updates to the next file only
                case 1: if (typeof XMLHttpRequest != 'undefined') { 
                            xmlhttp = new XMLHttpRequest(); 
                        } 
                        if (!xmlhttp) { 
                            throw "Browser doesn't support XMLHttpRequest."; 
                        } 
                        data = FileName; 
                        xmlhttp.open("POST", "UpdateVideoDownloaded.aspx?FileName=" + FileName + "&FileSize=" + FileSize, true); 
                        //Send the proper header information along with the request 
                        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
                         //xmlhttp.setRequestHeader("Content-length", data.length); 
                        xmlhttp.setRequestHeader("Connection", "close"); 
                        xmlhttp.send(data); 
                        break;
                case 2: alert("An error has occurred while downloading the file " + FileName);
                        break;
                        //Update any skipped files to back off the initialization updates to the passed file only
                case 3: if (typeof XMLHttpRequest != 'undefined') { 
                            xmlhttp = new XMLHttpRequest(); 
                        } 
                        if (!xmlhttp) { 
                            throw "Browser doesn't support XMLHttpRequest."; 
                        } 
                        data = FileName; 
                        xmlhttp.open("POST", "UpdateVideoSkipped.aspx?FileName=" + FileName, true); 
                        //Send the proper header information along with the request 
                        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
                         //xmlhttp.setRequestHeader("Content-length", data.length); 
                        xmlhttp.setRequestHeader("Connection", "close"); 
                        xmlhttp.send(data); 
                        break;        
                case 4: alert("The server returned a wrong MIME type (should be " + ContentType + ") for the file " + FileName);
                        break;
                case 5: alert("The server returned a wrong size (should be " + FileSize + ") for the file " + FileName);
                        break;
                case 6: alert("An error has occurred while writing the file " + FileName + " to disk");
                        break;
                case 7: alert("The file " + FileName + " could not be found on the " + "server");
                        break;
                case 8: alert("Access to the file " + FileName + " denied");
                        break;
                case 9: alert("Time out while downloading the file " + FileName);
                        break;
            }
        }
        function onDownloadComplete(Result){
            //The handler will display the error description
            switch (Result){
                        //Update the member download statistics and rebind the grid??? 
                case 0: if (typeof XMLHttpRequest != 'undefined') { 
                            xmlhttp = new XMLHttpRequest(); 
                        } 
                        if (!xmlhttp) { 
                            throw "Browser doesn't support XMLHttpRequest."; 
                        } 
                        data = ""; 
                        xmlhttp.open("POST", "UpdateDownloadsComplete.aspx", true); 
                        //Send the proper header information along with the request 
                        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
                         //xmlhttp.setRequestHeader("Content-length", data.length); 
                        xmlhttp.setRequestHeader("Connection", "close"); 
                        xmlhttp.send(data); 
                        break;
                case 1: alert("An error has occurred while creating the file list");
                        break;        
                case 2: alert("An error has occurred while downloading the file list");
                        break;
                case 3: alert("The file list is empty");
                        break;
                case 7: alert("The file list could not be found on the server");
                        break;
                case 8: alert("Access to the file list denied");
                        break;
                case 9: alert("Time out while downloading the file list");
                        break;
            }
        }
</script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<div class="borderDiv">
     <table cellspacing="0" class="borderTable0" width="100%">
         <tr>
            <td class="Subhdr" >
                <asp:label id="lblScreenHeader" Cssclass="ScreenHdr" runat="server" Height="24px">Member Video Download Detail</asp:label>
            </td>
        </tr>
    </table>
    <div class="NinetyNine5PercentWide SolidThreePixelBorder" style="background-color:White">
        <div class="OneHundredPercentWide EightPixelTopMargin TenPixelBottomMargin">
            <div class="FileListHdr">
                &nbsp;&nbsp;&nbsp;&nbsp;
                <span>Current Escrow Balance (Available for Future Use):</span>
                &nbsp;&nbsp;
                <asp:label ID="lblAvailableBalance" Cssclass="FileListHdr" runat="server" >$280.00</asp:label>
                &nbsp;&nbsp;&nbsp;&nbsp;
                <asp:label ID="lblAvailableBalanceMessage" Cssclass="FileListHdr" runat="server" ></asp:label>
            </div>
        </div>
        <div class="NinetyNinePercentWide">
            <div class="FileListHdr EightPixelBottomMargin">
                &nbsp;&nbsp;&nbsp;&nbsp;
                <span class="FileListHdr" >Number of Files Selected for Download:</span>
                &nbsp;
                <asp:label ID="lblTotalFiles" Cssclass="FileListHdr" runat="server" ></asp:label>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <span class="FileListHdr" >Total MBytes:</span>
                &nbsp;
                <asp:label ID="lblTotalMBytes" Cssclass="FileListHdr" runat="server" ></asp:label>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <span class="FileListHdr" >Estmated Download Time:</span>
                &nbsp;
                <asp:label ID="lblEstimatedTime" Cssclass="FileListHdr" runat="server" ></asp:label>
            </div> 
        </div>
        <div class="NinetyNinePercentWide">
            <div class="OneHundredPercentWide">
                <div class="DivDownload" >
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <script type="text/javascript">
                        //Create JavaScript object that will embed File Downloader to the page
                        var fd = new FileDownloaderWriter("FileDownloader", 170, 28);

                        //For ActiveX control full path to CAB file (including file name) should be specified
                        fd.activeXControlCodeBase = "aurigma/FileDownloader2.cab";
                        fd.activeXControlVersion = "2,0,16,0";

                        //Set the Download button text
                        fd.addParam("ButtonDownloadText", "DOWNLOAD NOW");

                        //Set the Download button background color
                        //fd.addParam("BackgroundColor", "#E0EBFF");
                        fd.addParam("BackgroundColor", "White");

                        //Set the Download button regular image
                        fd.addParam("ButtonDownloadImageFormat", "width=170;height=28;BackgroundColor=White;" + 
                            "urlNormal=App_Themes/Default/images/BtnDownload.jpg;" +
                            "urlHover=App_Themes/Default/images/BtnHover.jpg;" +
                            "urlPressed=App_Themes/Default/images/BtnPressed.jpg;" +
                            "urlDisabled=App_Themes/Default/images/BtnPressed.jpg");

                        //Set license key 
                        fd.addParam("LicenseKey", "13550-77033-55676-789DB-8332");

                        //Set reconnect attampts count
                        fd.addParam("ReconnectAttemptsCount", "360");

                        //Set reconnect timeout value (30000 = 10 seconds)
                        fd.addParam("ReconnectTimeOut", "10000");

                        //The following listener will perform some actions when the file list is about to be downloaded
                        fd.addEventListener("DownloadStep", "FileDownloader_DownloadStep");

                        //The following listener will perform some actions when download of a single file is finished
                        fd.addEventListener("DownloadItemComplete", "onDownloadItemComplete");

                        //The following listener will perform some actions when download process is complete
                        fd.addEventListener("DownloadComplete", "onDownloadComplete");

                        //The following listener will perform some actions when a general error is detected
                        //fd.addEventListener("Error", "onError");

                        //Add page load listener
                        //fd.fullPageLoadListenerName = "fullPageLoad";

                        //Set instructions property
                        fd.instructionsEnabled = true;

                        //Tell File Downloader writer object to generate all necessary HTML code to embed File Downloader into the page
                        fd.writeHtml();
              </script>
           </div> 
           <div class="FileListHdr">
              <asp:RadioButtonList id="rblMemberMachine" runat="server" Font-Bold="True" BackColor="White" ToolTip="Please select machine for downloading" 
                            CssClass="Radio FileListHdr" RepeatDirection="Horizontal" textAlign="right" BorderStyle="None"
                            AutoPostBack="True" OnSelectedIndexChanged="rblMemberMachine_SelectedIndexChanged" >
                            <asp:ListItem Text="Machine 1" Value="1" Selected="True"></asp:ListItem>
                            <asp:ListItem Text="Machine 2" Value="2"></asp:ListItem>
                            <asp:ListItem Text="Machine 3" Value="3"></asp:ListItem>
                    </asp:RadioButtonList>
                 </div>
       </div>
    </div>
    </div>
 <div class="OneHundredPercentWide" >
     <asp:Panel ID="Panel1" runat="server" Width="100%" >
            <asp:GridView id="grvSessionOrderDownloads" runat="server" BorderWidth="2px" BorderStyle="Solid" BorderColor="#C0C0FF"
                Font-Names="Arial" Font-Bold="True" Font-Size="8pt" GridLines="Horizontal" AutoGenerateColumns="False" 
                HorizontalAlign="Left" ForeColor="Blue" CellPadding="2" AllowSorting="True" Width="100%"
                OnRowDataBound="grvSessionOrderDownloads_OnRowDataBound" >

                <HeaderStyle Font-Names="Arial" HorizontalAlign="Center" ForeColor="White" BackColor="#152EE5" 
                    CssClass="sessionOrderDownloadHeaders" Font-Size="Medium" />
                <RowStyle BackColor="White" ForeColor="#333333" />
                <AlternatingRowStyle BackColor="#A5B0FF" />

                <Columns>
                    <asp:BoundField Visible="False" DataField="SORD_ID" HeaderStyle-Width="0px" >
                        <HeaderStyle Width="0px" />
                    </asp:BoundField>
                    <asp:TemplateField HeaderStyle-Width="0px" >
                        <ItemTemplate>
                            <asp:CheckBox Visible="False" Enabled="false" ID="HiddenCheckBox" runat="server"
                                 Checked='<%# Eval("SORD_SelectedForDownloadFlag") %>' />
                        </ItemTemplate>
                        <HeaderStyle Width="0px" />
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Select Files" HeaderStyle-ForeColor="White" > 
                        <ItemTemplate >
                            &nbsp;&nbsp;&nbsp;
                            <asp:ImageButton id="btnSelectVideo" runat="server" CommandArgument='<%# Eval("SORD_ID") %>' 
                                 CommandName="CheckUncheckVideo" ImageUrl='<%# GetCheckboxImage(Container.DataItem) %>' 
                                 Enabled='<%# Eval("SORD_EnableSelectionCheckBox") %>'
                                 Visible='<%# Eval("SORD_EnableSelectionCheckBox") %>'/>
                        </ItemTemplate>
                        <HeaderStyle Width="4%" />
                        <ItemStyle VerticalAlign="Bottom" />
                    </asp:TemplateField>
                    <asp:BoundField DataField="SORD_OSTA_ID" ReadOnly="True" HeaderStyle-ForeColor="White"
                        HeaderText="Status">
                        <HeaderStyle Width="6%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>
                    <asp:BoundField DataField="SORD_Topic" ReadOnly="True" HeaderStyle-ForeColor="White"
                        HeaderText="General <br /> Topic" HtmlEncode="false" >
                        <HeaderStyle Width="15%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>
                    <asp:BoundField DataField="SORD_Session" ReadOnly="True" HeaderStyle-ForeColor="White"
                        HeaderText="Session <br /> YYMMDD" HtmlEncode="false" DataFormatString="{0:00-00-00}" >
                        <HeaderStyle Width="6%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>
                    <asp:BoundField DataField="SORD_FileExtension" ReadOnly="True" HeaderStyle-ForeColor="White"
                        HeaderText="File <br /> Type" HtmlEncode="false" >
                        <HeaderStyle Width="5%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>
                    <asp:BoundField DataField="SORD_SessionTitle" ReadOnly="True" HeaderStyle-ForeColor="White"
                        HeaderText="Presentation's Video-Title <br /> &nbsp;&nbsp; (or) Support-File Name" HtmlEncode="false" >
                        <HeaderStyle Width="29%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>   
                    <asp:BoundField DataField="SORD_VideoUnlockKey" ReadOnly="True" HeaderStyle-ForeColor="White" 
                        HeaderText="File Unlock <br /> Password" HtmlEncode="false" >
                        <HeaderStyle Width="15%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>  
                    <asp:BoundField DataField="SORD_LastDownloadDate"  
                        ReadOnly="True" HeaderStyle-ForeColor="White" HeaderText="Last <br /> Download" htmlEncode="False"
                        DataFormatString="{0:d}" >
                        <HeaderStyle Width="10%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>   
                    <asp:BoundField DataField="SORD_RemainingDownloads"  
                        ReadOnly="True" HeaderStyle-ForeColor="White" HeaderText="Remaining <br /> Downloads" htmlEncode="False" DataFormatString="{0:##0}" >
                        <HeaderStyle Width="10%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" />
                    </asp:BoundField>
                </Columns>

            </asp:GridView>
        </asp:Panel>
    </div>
</div> 
<br />
&nbsp;&nbsp;&nbsp;
<asp:Label ID="Errormsg" runat="server" ForeColor="#CC0000"></asp:Label>

And then here is the code behind (with basics):

Imports System

Imports System.Data Imports System.Data.SqlClient Imports System.Text Imports System.Text.RegularExpressions Imports System.Security.Permissions Imports System.IO Imports System.Net

Partial Class MemberVideoDownloads Inherits System.Web.UI.Page Dim strConnection As String = ConfigurationManager.ConnectionStrings("MYTest").ConnectionString Dim cnnSQL As SqlConnection Dim cmdSQL As SqlCommand Dim dadSQL As SqlDataAdapter 'Member table Dim dtMember As New DataTable Dim drMember As DataRow 'Session Order table Dim dtSessionOrder As New DataTable Dim drSessionOrder As DataRow 'Member Order table for download Dim dtSessionOrdersForDownload As New DataTable Dim drSessionOrdersForDownload As DataRow Dim dvSessionOrdersForDownload As DataView 'Session Folder table Dim dtSessionFolder As New DataTable Dim drSessionFolder As DataRow 'Session Detail table Dim dtSessionDetail As New DataTable Dim drSessionDetail As DataRow 'Session Orders Selected table Dim dtSessionOrdersSelected As New DataTable Dim drSessionOrdersSelected As DataRow 'Constants Private Const BYTES_PER_MEGABYTE As Integer = 1048576 'Class Modules Dim sp As New StoredProcs Dim so As New SessionObjects

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not (IsPostBack) Then
        'Set the current and return pages
        so.Ppage = so.Cpage
        so.Cpage = "MemberVideoDownloads.aspx"

        'Load the page information
        LoadPageInfo()

        'Rebind the GridView
        RebindGridView()

    End If

End Sub

Private Sub LoadPageInfo()

End Sub

Protected Sub DisplaySelectedDownloadStats()

End Sub

Protected Sub grvSessionOrderDownloads_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grvSessionOrderDownloads.RowCommand

    'Display the statistics for the orders selected for download
    DisplaySelectedDownloadStats()

    'Rebind the GridView
    RebindGridView()

End Sub

Private Sub RebindGridView()
    Dim maxDownloadsPerSession As Integer = Convert.ToInt32(ConfigurationManager.AppSettings("MaximumDownloadsPerSession"))

    cnnSQL = New SqlConnection(strConnection)
    If rblMemberMachine.SelectedValue = "3" Then
        cmdSQL = New SqlCommand("GetSessionOrdersForDownloadMachine3", cnnSQL)
    ElseIf rblMemberMachine.SelectedValue = "2" Then
        cmdSQL = New SqlCommand("GetSessionOrdersForDownloadMachine2", cnnSQL)
    Else
        cmdSQL = New SqlCommand("GetSessionOrdersForDownloadMachine1", cnnSQL)
    End If
    cmdSQL.CommandType = CommandType.StoredProcedure
    cmdSQL.Parameters.Clear()
    cmdSQL.Parameters.Add("@MEMB_ID", SqlDbType.VarChar, 20).Value = so.MEMB_ID
    cmdSQL.Parameters.Add("@DOWNLOAD_LIMIT", SqlDbType.Int).Value = maxDownloadsPerSession
    cnnSQL.Open()
    dadSQL = New SqlDataAdapter(cmdSQL)
    dadSQL.SelectCommand = cmdSQL
    dadSQL.Fill(dtSessionOrdersForDownload)
    cnnSQL.Close()

    drSessionOrdersForDownload = dtSessionOrdersForDownload.Rows(0)
    Dim Flag As Boolean = drSessionOrdersForDownload("SORD_EnableSelectionCheckBox")

    dvSessionOrdersForDownload = dtSessionOrdersForDownload.DefaultView
    dvSessionOrdersForDownload.Sort = "SORD_EnableSelectionCheckBox desc, SORD_Session desc, SORD_Topic, SORD_SessionTitle"
    grvSessionOrderDownloads.DataSource = dvSessionOrdersForDownload
    grvSessionOrderDownloads.DataBind()

End Sub

Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender

End Sub

Protected Sub rblMemberMachine_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    'Rebind the GridView
    RebindGridView()
End Sub

Protected Sub grvSessionOrderDownloads_OnRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    'Color the selected rows

End Sub

End Class

+1  A: 

You can generate a bit of javascript that will cause a postback for you to use:

http://msdn.microsoft.com/en-us/library/system.web.ui.page.getpostbackeventreference%28VS.71%29.aspx

That page has a pretty comprehensive sample. Without knowing more about your scenario I can't give you a full working sample, but this is definitely one way to get the page to postback.

Anderson Imes
Thanks for that info. I am not sure that will work. I think I need more than a postback because my datasource is not on the page. It is an SQL Query and sort in the code behind. One thing I do have is I can call an ASPX only page (with no html) and I can run VB from that page. But, the gridview isn't accessable since it isn't declared there.
James
You've sort of blown my mind here. I don't have a clue what your situation is. I think you're going to post a lot more about your situation for it to be answered in a way you are going to find satisfactory.
Anderson Imes
Ok, I can post more. Maybe the postback will work, I am just unfamilar with how that would work. If it activates the code behind logic, how would it know to do a rebind of the gridview since that isn't normally done with a postback? I only do that when not a postback or I call it with an event. Sorry, I will post much more detail.... The no-html page is something I had never seen before, pretty wild but it allows running a VB program based on jscript triggers from the ActiveX control on the main aspx page. Thank youJames
James
I threw up in my mouth a little bit from what you just described :) The *common* scenario for a gridview is a GridView, declared on a page, and populated from codebehind. Codebehind code is executed server-side on a postback. Your scenario sounds a bit different from the "happy path".
Anderson Imes
Anderson,All the gridview handling is done with normal ASP.NET and VB logic as you would expect. These special programs with no html handle updates to the database at various stages during the download file process. As the process is started, as each file is finished, and when the total download is complete. I am just looking for a way to trigger the rebind after the downloading is complete. I have the code ready to post here which I will do now. Thank you
James
I wonder if I could add a hidden button on my main page with an OnClicked event. Could I somehow trigger the button as clicked using jscript? Then I could do my rebind in the code behind.
James
Ok, i got this from another post, I will try adding a hidden button with an onclick event and fire it based on my trigger from the downloader: $('#example-button-id').click();
James
That's almost identical to my suggestion, except it would be: ThingIGotFromMyCallToGetPostbackReference();, rather than assigning it to the OnClick and faking the click event. You are cutting out the middle man (the fake button). It's up to you.
Anderson Imes
Anderson, Ok I will need to study the method you pointed out. I am just not clear how and where to code that yet. Thank you - James
James
Anderson, I prefer the more direct method. I am confused by the example somewhat. The MyControl class thing is a bit confusing for me, the rest I understand. So I code that MyControl as a seperate .cs class on it's own? I am a beginner. Thanks
James