Avatar billede hedemann Nybegynder
27. februar 2006 - 09:24 Der er 7 kommentarer og
1 løsning

opdatering af felt under indlæsning

Hej, jeg vil gerne under indlæsning af records i en tabel give besked til brugeren.

Der skal indlæses ca 7000 records fra en "flad" fil til en tabel - og vil gerne informer om antal indlæste records for hver f.eks. 100. Har forsøgt med response.write & flush, men uden held.

Det skal virke under vb.net.
Avatar billede snepnet Nybegynder
27. februar 2006 - 11:37 #1
Du kan lave et waitscreen - en god implementering kan du finde her:
http://www.lennybacon.com/PleaseWaitBuildingAWaitScreenControlForASPNET.aspx

Men eller synes jeg du skal starte en tråd på serveren der varetager processeringen, og du kan så med callbacks hente fremdriften fra klienten.

hvilket version arbejder du med ? (1.1 / 2.0)

mvh
Avatar billede hedemann Nybegynder
27. februar 2006 - 11:45 #2
2.0 og er helt (næsten) grøn ;-)
Avatar billede hedemann Nybegynder
27. februar 2006 - 14:32 #3
jeg kan se at eksemplet er i C, findes det også i vb?
Avatar billede snepnet Nybegynder
27. februar 2006 - 15:24 #4
det ved jeg ikke - men der findes fine online oversættere der i de fleste tilfælde kan hjælpe dig det meste af/hele vejen.
f.eks. er der en her:
http://kamalpatel.net/ConvertCSharp2VB.aspx
men som sagt ... jeg synes du skal køre det i en tråd på serveren - og så spørge til den med callbacks.
det er ikke så slemt som det lyder, og du kan godt få et lille eksempel - hvis du kunne tænke dig at rode dig ud i det.
mvh
Avatar billede hedemann Nybegynder
27. februar 2006 - 15:47 #5
ja, det kunne være sjovt -  så hvis du har et eksempel jeg kan se på vil det være fint....
Avatar billede snepnet Nybegynder
28. februar 2006 - 13:30 #6
undskyld ventetiden - her et lille eksempel.... Det er ikke ligefrem produktionskode ;o)
(men ... det kan være at du lige kan få en idé af det)

først en form:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript">
    function GetProgress()
    {
        message='';
        <%= CallBackReference %>
    }
   
    function ShowProgress(message)
    {
        document.getElementById('<%= txtStatus.ClientID %>').value += message;
        if(message != 'DONE')
        {
            window.setTimeout('GetProgress()', 500);
        }
    }
    </script>
</head>
<body id="body" runat="server">
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnStart" runat="server" Text="Start" OnClick="btnStart_Click" />
        <asp:Button ID="btnCheckStatus" runat="server" Text="Check" /><br />
        <asp:TextBox ID="txtStatus" runat="server" TextMode="MultiLine" Height="300px" Width="400px"></asp:TextBox>
    </div>
    </form>
</body>
</html>

// og så så en codebehind
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Threading;

public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
{
    protected WorkerClass Worker
    {
        get { return Session["Worker"] as WorkerClass; }
        set { Session["Worker"] = value; }
    }
   
    protected string CallBackReference
    {
        get { return ClientScript.GetCallbackEventReference(this, "message", "ShowProgress", null); }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        body.Attributes["onload"] = null;
    }

    protected void btnStart_Click(object sender, EventArgs e)
    {
        Worker = new WorkerClass();
        Worker.DoTheWork();
        body.Attributes.Add("onload", "GetProgress();");
    }

    #region ICallbackEventHandler Members
    public string GetCallbackResult()
    {
        if (Worker.WorkDone == 10)
        {
            body.Attributes["onload"] = null;
            Worker = null;
            return "DONE";
        }
        else
        {
            return Worker.WorkDone.ToString() + Environment.NewLine;
        }
    }

    public void RaiseCallbackEvent(string eventArgument)
    {
    }
    #endregion   
}

public class WorkerClass
{
    private int _workDone;

    public int WorkDone
    {
        get { return _workDone; }
    }
   
    public void DoTheWork()
    {
        Thread thread = new Thread(new ThreadStart(this.DoTheWorkInternal));
        thread.Start();
    }

    private void DoTheWorkInternal()
    {
        for (int i = 1; i <= 10; i++)
        {
            Thread.Sleep(500);
            _workDone = i;
        }
    }
}

det er bare fis og ballade - men du kan da lige prøve det af.

mvh
Avatar billede hedemann Nybegynder
05. marts 2006 - 00:03 #7
Har endnu ikke haft tid til at afprøve, men send et svar og jeg "betaler" - du plejer jo at ha' rimlig styr på det du siger
Avatar billede snepnet Nybegynder
07. marts 2006 - 00:56 #8
:o) - det kan du såmænd godt få, men du er meget velkommen til at vente med at "betale" til du har prøvet det :o)
mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester