Avatar billede roenving Novice
18. maj 2005 - 23:33 Der er 6 kommentarer og
1 løsning

Datagrid - kontrol over editability og farvekodning af felter

Case:
Et fuldt dynamisk sprog-styringsmodul, hvor data opbevares i en xml-fil for hvert sprog samt en reference-fil og en sprog-oversigt (serialisationen er der fuldt styr på !-)

Problem:
Dynamikken kræver, at enkelt-fraser kan opdateres eller tilføjes i referencen samt opdateres enkeltvis i de enkelte sprog, hvilket betyder, at der ikke nødvendigvis er synkronisering mellem frasernes rækkefølge i de forskellige sprog-filer.

Hvordan opbygger man en datasource (objekt-opbygningen kan bygges direkte fra serialisationen og er ikke i sig selv problemet -- hashtables som mellemstation er jo relativt simpel at bruge !-)

Men hvordan tilgår man de enkelte felter i grid'et og f.eks. sætter en farvekodning på felter, hvis opdatering er ældre end det tilsvarende felt i referencen samt sætter reference-kolonnen til ikke at være editerbar ?-)

Umiddelbart skal alle andre felter end de to kolonner fra referencen være editerbare i et grid, hvor fraser (hvor teksten sagtens kan være meget lange) vises langs den vertikale akse og sprog vises som kolonner ...

PS. Udgangspunktet er C#-kode, men selvfølgelig kan jeg selv oversætte fra andre sprog !o]
Avatar billede snepnet Nybegynder
19. maj 2005 - 17:30 #1
hejsan roenving :o)

normalt vil du hooke op på ItemDataBound på griddet, hvis du vil manipulere med det, baseret på din datakilde :

someGrid.ItemDataBound += new DataGridItemEventHandler(someGrid_ItemDataBound);

private void someGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
{
  // for alle almindelige rækker :
  if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    // få fat i de enkelte kontroller i din template sådan her :
    TextBox tb = (TextBox)e.Item.FindControl("someId");
    // og gør noget ved den :
    tb.BackColor = Color.Red;
    // eller
    tb.ReadOnly = true;
    // som for dig nok bliver noget i stil med :
    if(IsOutdate(...))
      tb.BackColor = ....
  }
}

hvis du i handleren for itemdatabound vil have fat i datakilden skal der lige lidt besværgelser til :
(datakilden pr. række er et DataRowView)

såhh.... en forespørgsel på en værdi i dit datagrundlag under databinding kunne se sådan her ud :

DataRowView drv = (DataRowView)e.Item.DataItem;
if(drv["someColumnHeader"].ToString() == "whatever")
  // et eller andet

nu ved jeg så ikke om du vil præsentere dit grid udelukkende med tekstbokse, hvor ikke alle så er editerbare, eller om du bruger det som griddet pr. standard tilbyder (edit, update, delete knapper - hvor edit medfører tekstbokse istedet for labels), og hvordan du gør det smartest er lidt afhængig af det.

du kan gå fra en relativ deklarativ template-baseret model, og til en fuld programmatisk tilgang til det - ved simpelhen at opbygge dit grid fuldstændig programmatisk.

hvis der er mange forskellige forhold du gerne vil styre, og som kan ændre sige ved forskellige events, er det muligvis en fordel for dig, at rette griddet af lige inden renderingen ved noget i denne stil :

protected override void OnPreRender(EventArgs e)
{
  foreach(DataGridItem dgi in this.DataGrid1.Items)
  {
    // ret det der skal rettes til afhængig af diverse her
  }
  base.OnPreRender (e);
}

håber det var lidt at gå videre med - og ellers bare sig hvad du har brug for, så skal jeg prøve at give et bud på det.

mvh
Avatar billede roenving Novice
25. maj 2005 - 10:37 #2
Hej, snepnet, jeg er desværre gået i stå et andet sted, for det kræver jo lige en masse linjers kodning, så foreløbig har jeg prioriteret at få fat i de data, som evt. bliver ændret (en asp.NET-ting !-), men er stødt ind i et problem, som forundrer mig ...

-- når jeg prøver at hente TextBox.Text er landespecifikke bogstaver filteret fra ...

-- jeg har prøvet mange forskellige muligheder, men den gør det under alle omstændigheder, og det er jo særdeles uheldigt for et modul, som skal editere i mange forskellige sprog ,-(
Avatar billede snepnet Nybegynder
26. maj 2005 - 00:36 #3
høh ... ja det er jo lidt uheldigt :o)
har du en web.config - fil i rootfolderen, og har du angivet nogle encodings der ?

du kan eventuelt prøve med denne (det er som vs opretter det som standard) :

<globalization
    requestEncoding="utf-8"
    responseEncoding="utf-8"
/>

det skal proppes ind i system.web.... du kan lige få et fuldt eksempel på en vs-web.config her (det meste er bare kommentarer, men så kan du jo se dem ved samme lejlighed :o) :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   
  <system.web>

    <!--  DYNAMIC DEBUG COMPILATION
          Set compilation debug="true" to enable ASPX debugging.  Otherwise, setting this value to
          false will improve runtime performance of this application.
          Set compilation debug="true" to insert debugging symbols (.pdb information)
          into the compiled page. Because this creates a larger file that executes
          more slowly, you should set this value to true only when debugging and to
          false at all other times. For more information, refer to the documentation about
          debugging ASP.NET files.
    -->
    <compilation
        defaultLanguage="c#"
        debug="true"
    />

    <!--  CUSTOM ERROR MESSAGES
          Set customErrors mode="On" or "RemoteOnly" to enable custom error messages, "Off" to disable.
          Add <error> tags for each of the errors you want to handle.

          "On" Always display custom (friendly) messages.
          "Off" Always display detailed ASP.NET error information.
          "RemoteOnly" Display custom (friendly) messages only to users not running
          on the local Web server. This setting is recommended for security purposes, so
          that you do not display application detail information to remote clients.
    -->
    <customErrors
    mode="RemoteOnly"
    />

    <!--  AUTHENTICATION
          This section sets the authentication policies of the application. Possible modes are "Windows",
          "Forms", "Passport" and "None"

          "None" No authentication is performed.
          "Windows" IIS performs authentication (Basic, Digest, or Integrated Windows) according to
          its settings for the application. Anonymous access must be disabled in IIS.
          "Forms" You provide a custom form (Web page) for users to enter their credentials, and then
          you authenticate them in your application. A user credential token is stored in a cookie.
          "Passport" Authentication is performed via a centralized authentication service provided
          by Microsoft that offers a single logon and core profile services for member sites.
    -->
    <authentication mode="Windows" />

    <!--  AUTHORIZATION
          This section sets the authorization policies of the application. You can allow or deny access
          to application resources by user or role. Wildcards: "*" mean everyone, "?" means anonymous
          (unauthenticated) users.
    -->

    <authorization>
        <allow users="*" /> <!-- Allow all users -->
            <!--  <allow    users="[comma separated list of users]"
                            roles="[comma separated list of roles]"/>
                  <deny      users="[comma separated list of users]"
                            roles="[comma separated list of roles]"/>
            -->
    </authorization>

    <!--  APPLICATION-LEVEL TRACE LOGGING
          Application-level tracing enables trace log output for every page within an application.
          Set trace enabled="true" to enable application trace logging.  If pageOutput="true", the
          trace information will be displayed at the bottom of each page.  Otherwise, you can view the
          application trace log by browsing the "trace.axd" page from your web application
          root.
    -->
    <trace
        enabled="false"
        requestLimit="10"
        pageOutput="false"
        traceMode="SortByTime"
        localOnly="true"
    />

    <!--  SESSION STATE SETTINGS
          By default ASP.NET uses cookies to identify which requests belong to a particular session.
          If cookies are not available, a session can be tracked by adding a session identifier to the URL.
          To disable cookies, set sessionState cookieless="true".
    -->
    <sessionState
            mode="InProc"
            stateConnectionString="tcpip=127.0.0.1:42424"
            sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
            cookieless="false"
            timeout="20"
    />

    <!--  GLOBALIZATION
          This section sets the globalization settings of the application.
    -->
<globalization
    requestEncoding="utf-8"
    responseEncoding="utf-8"
/>
 
</system.web>

</configuration>

mvh
Avatar billede roenving Novice
26. maj 2005 - 09:48 #4
Tjah, jeg fandt præcis ud af, at jeg kun kunne få lokale karakterer med, når jeg brugte iso-8859-1 i web.config ...

-- men den holder jo ikke en meter, da jeg får brug for minimum 8859-1, -2, -6, -9 og måske -8, -11 samt andre tegnsystemer ...

-- så der skal tænkes anderledes der, og serialisationen skal ændres til at være Unicode, men det er jo bare et teknisk problem !-)
Avatar billede roenving Novice
11. juni 2005 - 12:50 #5
Men jeg må nok hellere lukke, så smid et svar, så jeg kan komme af med pointene !-)
Avatar billede snepnet Nybegynder
11. juni 2005 - 13:24 #6
hvad søren .... det var ellers en af de ældre den her :o) - men hvis du gerne vil have et svar - kommer det her :o)
hvordan går det ellers med det nu .... har du fået nogle ting til at spille ?
mvh
Avatar billede roenving Novice
11. juni 2005 - 13:26 #7
Desværre er den ikke flyvende endnu, men jeg tror jeg ved hvad der skal til, men det ser ud til at blive en lang vej, hvor jeg i stedet for at servere alle muligheder må over i sider til hver tegntabel ,-(

-- men tak for hjælpen !-)
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