18. maj 2005 - 23:33Der 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]
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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 ,-(
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) :
<!-- 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" />
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
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 !-)
Synes godt om
Ny brugerNybegynder
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.