Frage zu DataGridTableStyle

Jacizzle

Mitglied
Hallöchen.

Ich habe ein kleines Problem, ich bin schon seid ein paar Tagen auf der Suche, wie man ein DataGrid vom Style her anpassen kann und das funktioniert ja über das Objekt "DataGridTableStyle". Ich hab auch einige Beispiele gefunden zu diesem Objekt, nur leider funktionierte bisher all das was ich getestet habe nicht, deshalb will ich euch mal fragen ob ihr mir evt. sagen könnt wo ich einen Fehler mache.

Der Code:

Code:
       DataSet ds2 = new DataSet();
       this.zeigePanel(true,false,false,false);
       ds2 = test.DatenholenLocal("SELECT Sp1, Sp2 FROM Tabelle", "Tabelle", true);
       this.grdPosListe.DataSource = ds2.Tables["Table"].DefaultView;

       // Tabel Style Test

       DataGridTableStyle style = new DataGridTableStyle();
       style.MappingName = "Tabelle";
			
       DataGridTextBoxColumn compName = new DataGridTextBoxColumn();
       DataGridTextBoxColumn compName2 = new DataGridTextBoxColumn();
			
       compName.HeaderText = "Sp1";
       compName.MappingName = "Sp1";
       compName.Width = 300;
       style.GridColumnStyles.Add( compName );

       compName2.HeaderText = "Sp2";
       compName2.MappingName = "Sp2";
       compName.Width = 300;
       style.GridColumnStyles.Add( compName2 );

       this.grdPosListe.TableStyles.Add( style );


So, bis auf das ich Tabellen und Spaltennamen (Zur Übersicht) abgeändert habe, stimmt der Code mit meinem genau überein!

grdPosListe ist mein Datagrid. Kann mir jemand von euch sagen wo der fehler da sein könnte? Wenn es nötig ist, erklär ich auch noch was im Code passiert, denke ja aber das das nicht nötig ist.
 

JensG

Erfahrenes Mitglied
Hallo,

also auf Anhieb sehe ich erst mal keinen grassen Fehler aber ich habe auch eher
den Blick für VB.NET :)

Auf alle Fälle ist es ganz wichtig das der Mappingname des Tablestyles
absolut identisch mit dem Tabellennamen ist. Deshalb verwende ich.

Mappingname = DataTable.TableName wenn Source eine DataTable ist oder
Mappingname = DataSource.Tabeles(0).Tablename wenn Source ein Dataset ist

Das gleiche gilt für die Columns !

Vielleicht wäre es doch sinnvoll wenn du mal ein wenig mehr Code zeigst oder ihn etwas
erläuterst. Was genau funktioniert denn nicht ? Wird gar nix angezeigt ?


Jens
 

Jacizzle

Mitglied
Ich bedanke mich erstmal dafür das überhaupt noch jemand geantwortet hat *g*

Ich denke mehr Code wird dir nicht viel bringen, hmm das einzige was evt. noch interessant wär, wär ja die Funktion wo er den SQL Befehl ausführt, aber der hat ja eig. nix mehr mit dem DataSet zu tun.

Ich versuch mal in kurzen Worten mein Programm zu erklären:

Erstmal programmiere ich auf einem PDA und benutze deswegen CFrameWork, ist aber denke ich nicht weiter schlimm, also mein Programm:

Alles läuft auf einem Formular, aber es gibt mehrere Panels, die ich nacheinander aufrufe wenn irgendwie nen Button gedrückt wird, das ganze verhält sich dann auf dem PDA wie mehrere Formulare, deshalb auch diese Zeile:

Code:
this.zeigePanel(true,false,false,false);

So, man befindet sich erst in einem "Formular" wo man Daten eingeben kann (Artikelnummer, Bezeichnung, Datum usw.), dass ganze wird mit nem Speichernbutton in ne lokale DB abgelegt. Der Speichervorgang dürfte aber nicht weiter wichtig sein. Danach kann man auf nen "Zurück-Button" klicken und ruft damit den Code auf der wichtig ist und den ich schon gepostet hab.

Mit dieser Zeile hier ruf ich die Daten aus der DB ab:

Code:
ds2 = test.DatenholenLocal("SELECT Sp1, Sp2 FROM Tabelle", "Tabelle", true);

Hier binde ich es an das DataGrid, was ich ja anpassen möchte:

Code:
this.grdPosListe.DataSource = ds2.Tables["Table"].DefaultView;

Das ganze ist nen DataSet in dem die Daten aus dem SQL Befehl stecken.

Der Rest ist ja der Versuch nen TabelStyle einzubinden, was nicht funktioniert. Der Code den ich gepostet hab, ist alles aus dem Zurück Click Event, mehr steht da nicht drin, deshalb denke ich, ist auch mehr code unwichtig.

Was genau nicht funktioniert? Wenn ich den Zurück Button klicke, wird zwar das DataGrid angezeigt, jedoch ändert sich nix an dem Style des DataGrids und genau das will ich ja :( Also die Tabelle sieht dann aus wie immer.

Hat dir meine Erklärung nun bisschen weiter geholfen?

Ich hab ja schon haufenweise im Internet gelesen und alle machen das eig. so wie ich, komischer Weise funktioniert es nicht! Deshalb bin ich auch stark davon überzeugt das es wahrscheinlich am MappingName liegt.
 
Zuletzt bearbeitet:

zioProduct

Erfahrenes Mitglied
Mal n kleiner feiner anderer Lösungsansatz -->
C#:
dsMeil = new DataSet();
string date = selYearstr+selMonstr+"01";
string sqlGetSpMeil ="exec sp_MeilensteinFull  "+date+"";
SqlDataAdapter sqlDA = new SqlDataAdapter(sqlGetSpMeil,connection);
sqlDA.Fill(dsMeil);
int version =5;
for(int i = 0; i < dsMeil.Tables[0].Columns.Count;i++)
{
BoundColumn objbc1 = new BoundColumn();
					
if(i<=1)
{
objbc1.DataField = dsMeil.Tables[0].Columns[i].ColumnName;
objbc1.HeaderText ="Auftrag";
}
else
{	
objbc1.DataField = dsMeil.Tables[0].Columns[i].ColumnName;	
						
if(i == 3)
{
							
if(selMon <10)
objbc1.HeaderText ="0"+selMon+"/" +selYear;	
else
if(selMon <13)
objbc1.HeaderText =selMon+"/" +selYear;	
else
{
selMon = selMon -12;
selYear++;
objbc1.HeaderText = "0"+selMon+"/"+selYear;
}
}
else
if(i == version)
{
selMon = selMon +1;
if(selMon <10)
									objbc1.HeaderText ="0"+selMon+"/" +selYear;	
								else
									if(selMon <13)
									objbc1.HeaderText =selMon+"/" +selYear;	
								else
	{
									selMon = selMon -12;
									selYear++;
									objbc1.HeaderText = "0"+selMon+"/"+selYear;
	}
	version = version+2;
}
						
}

if(i==0 ||i==2 ||i==4 ||i==6 ||i==8 ||i==10 ||i==12 ||i==14 ||i==16 ||i==18 ||i==20 ||i==22 ||i==24)
objbc1.Visible=false;


dgKap.Columns.Add(objbc1);
dgKap.DataSource = dsMeil.Tables[0];
dgKap.DataBind() ;
					
}
sqlDA = null;
Ne Kurze Erklärung--> Diesen Codeschnipsel verwende ich dafür, eine StoredProcedure in einem DataGrid abzubilden, dazu will ich nur jede dritte Spalte angezeigt haben, und dazu soll die Spalte den Titel in form von "01/2006" oder so haben. Dies ermögliche ich mit obigem Code. Durch das du den Typ der Column definierst (im BSP BoundColumn), kannst du für jede Spalte, die du in dein Datagrid einfügst, ganz eigene "Styles" verwenden, welche du unter objbc1. findest...
Vielleicht dient es dir als anderer Lösungsansatz, wie man den Style des Grids verändern kann..

mfg
ziop
 

Jacizzle

Mitglied
Hallöchen..

Ich bedanke mich für die Hilfe, jetzt hab ich es zumindestens hinbekommen das die Spaltenbreite anpassbar ist, d.h. wohl das ich alles anpassen kann *g* Es lag wohl wirklich (habs ja auch schon so vermutet) an der MappingName - Eigenschaft. Habe es nun so gemacht wie JensG es geschrieben hat.

@ zioProduct: Den Code von dir schau ich mir aber auch noch an, sind bestimmt nochn paar interessante Sachen bei die ich noch gebrauchen kann.

@ JensG: Hat zwar noch ein paar Minuten gedauert bis ich verstanden habe das du VB benutzt Jens (habs überlesen) und deshalb ging das mit den runden Klammern nicht (man muss bei CSharp die eckigen nehmen), aber als mir das dann aufgefallen ist, hats funktioniert

Danke nochmal!