PDA

Vollständige Version anzeigen : Spaltenbreite einer Accesstabelle in VB.net


[CoNveX]
31.08.2003, 17:51
Hey!

Ahm ich weiß nicht ob ich das hier rein schreiben muss oder in VB.net also falls es hier falsch ist, entschuldige ich mich schon mal!!!

Meine Frage:
Ich habe eine Datenbank angelegt, mit einer Access-Tabelle!
Diese wird in meiner Form angezeigt und ich kann auch hineinschreiben, aber wie kann ich in VB.net die EINZELNEN Spaltenbreiten bestimmen??
Habe nur gefunden wie ich in meiner Datagrid alle Spaltenbreiten bestimme! Und das ist ja blöd!!
Weil wenn ich in Access die Spaltenbreite bestimm, wird dass nicht in VB.net übernommen!!!

bin über jede Antwort dankbar!!!
thx

jmc
31.08.2003, 18:50
Hi

wenn schon, dann musst du das im Datagrid einstellen. Du erhältst ja von Access nur ein Recordset, aber nicht die Einstellungen, die du in der Tabellenansicht von Access machst, denn das ist keine eigentliche Tabellen, bzw. Feldeigenschaft ...

Da ja VB.net besser sein sollte als alles bisherige ;) muss das wohl irgendwie gehen. Allerdings kann ich dir nicht sagen wie.
Das wäre - wie du richtig bemerkst - eine Frage für das VB.net-Forum.

Vielleicht verschiebt einer der Mod's den Beitrag dorthin ..

Serge
01.09.2003, 08:45
Wie lässt du die Access Tabelle den Anzeigen kannst du vielleicht ein abgemagertes Bsp deines programms hochladen.

[CoNveX]
01.09.2003, 12:59
Hab grad nur Mittagspause, und darum keine Zeit was an meinem Prog zu verändern!!! Aber hier der Link nach dem ich das Ding gebastelt habe! Bin noch Anfäger und da wird es richtig gut erklärt!!

Datenbankzugriff! (http://www.galileocomputing.de/openbook/vb_net/msvb090003.htm#Rxxmsvb090003256ZugriffvonVBNETaufdieDatenbank)

Weiß ja nicht ob du mein Prog brauchst um mir zu helfen oder um daraus zu lernen!! Wenn es das Zweite ist, dann ist der Link eh viel besser!!

Serge
02.09.2003, 07:37
Also wenn du die Spaltengrösse verändern willst stellt das Steuerelement in der du die Tabelle anzeigst die Eigenschaft PreferredColumnwidth zur verfügen.Die bezieht sich leider auf alle Spalten.

Wenn du ein Datagrid benutzt kann ich dir aber ein paar Funktionen zukommen lassen die die Columnwidth automatisch an die Textlänge anpassen.

[CoNveX]
02.09.2003, 12:55
Au cool benutze Datagrid! Also her mit den Funktionen! :angel:

thx

Serge
02.09.2003, 13:36
Natürlich musst du die Funktionen auf deine Bedürfnisse etwas umstellen.Sollte aber zu schaffen sein.Hab ich schliesslich auch geschafft ;)

Ausserdem hilft das beim Verständnis

Serge
04.09.2003, 10:13
Ein Feedback zur Funktion wäre ganz nett und Foren üblich

[CoNveX]
04.09.2003, 13:00
Sorry! Hatte kaum Zeit um am PC sitzen!! Hab mir das aber mal angeschaut. Testen kann ich es leider nicht, da ich keine SQL Server hab! Aber hab mir dann halt den Code unter die Lupe genommen! Versteh zwar noch nicht ganz was da vor geht, aber das werd ich schon noch rausfinden!! Denke werd heute Abend nach dem Arbeiten ein wenig rumspielen, höchstens ich geh heute noch weg (Disco) dann vielleicht erst später!!!

Also auf jeden Fall mal Danke!!!!!

Serge
05.09.2003, 13:17
du brauchst kein SQL-Server du musst an die Stelle meines ConnectionStrings einfach den Connection String zur Access Datenbank setzen.

Serge
05.09.2003, 13:29
Hab mal einen ConnectionString beispelhaft verfasst der es ermöglicht eine Verbindung zu einer Access Datenbank mdb herstellt:

Dim oOleDbConnection As OleDb.OleDbConnection
Dim sConnString As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\myPath\myJet.mdb;" & _
"User ID=Admin;" & _
"Password="
oOleDbConnection = New OleDb.OleDbConnection(sConnString)
oOleDbConnection.Open()

Eigentlich brauchst du nur den String aber vielleicht hilft dir der Rest auch ein bissl

[CoNveX]
05.09.2003, 20:05
Hm irgendwie funzt daz net!! Aber ist ja auch egal, ich muss ja nur das



#Region "Auto size column Code"
Public Sub AutoSizeGrid()

Dim numCols As Integer
numCols = CType(DataGrid1.DataSource, DataTable).Columns.Count
Dim i As Integer
i = 0

Do While (i < numCols)
AutoSizeCol(i)
i = (i + 1)

Loop

End Sub
'This procedure can be used to auto size a range of columns
Public Sub AutoSizeCols(ByVal start As Integer, ByVal finish As Integer)

Dim i As Integer
i = start

Do While (i <= finish)
AutoSizeCol(i)
i = (i + 1)

Loop

End Sub
'This procedure is used to auto size specific columns
Public Sub AutoSizeCol(ByVal col As Integer)

Dim width As Single
width = 0
Dim numRows As Integer
numRows = CType(DataGrid1.DataSource, DataTable).Rows.Count
Dim g As Graphics
g = Graphics.FromHwnd(DataGrid1.Handle)
Dim sf As StringFormat
sf = New StringFormat(StringFormat.GenericTypographic)
Dim paddingFactor As Integer = 10 'This is used for taking care of leading and trailing padding of the etxt field
'You can experiment with it to find the right padding factor for your tables.
Dim size As SizeF
Dim i As Integer
i = 0

Do While (i < numRows)
size = g.MeasureString(DataGrid1(i, col).ToString, DataGrid1.Font, 500, sf)
If (size.Width > width) Then
width = size.Width
End If
i = (i + 1)

Loop
g.Dispose()
DataGrid1.TableStyles("tb_Artikel").GridColumnStyles(col).Width = CType(width, Integer) + paddingFactor 'This is for taking care of Padding of the text field


End Sub
#End Region

Bei mir einfügen oder??? Und zuschneiden!

Serge
06.09.2003, 00:09
Du darfst auf keinen Fall vergessen den Tablestyle zu initialisieren.Und der Mappingname muss deiner Tabelle entsprechen.
Egentlich sollte der ConnectionString funzen.Wie stellst du denn sonst ne Verbindung mit den Tabellen her?

[CoNveX]
06.09.2003, 11:08
Du meinst das:

Dim tblStyle As New DataGridTableStyle()
tblStyle.MappingName = "tb_Artikel"
' make the dataGrid use our new tablestyle and bind it to our table


mit TableStyle initialisieren oder? Hab die Connection mit dem Assistenten gemacht, wie in dem Link beschrieben der in nem Beitrag der weiter oben steht beschrieben ist! Da ist auch ein Beispiel dabei wie man es ohne Assistent machen würde und laut der Seite so:

Dim objConnection As OleDb.OleDbConnection = _
New OleDb.OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=D:\Data\Kapitel09\Rechnungen.mdb")
Dim objDataAdapter As OleDb.OleDbDataAdapter
Dim objDataSet As DataSet
Dim objDataView As DataView
User Id=Martin; Password=Medardus;

Ist eigentlich fast gleich wie das was du geschrieben hast!!!

[CoNveX]
08.09.2003, 14:06
Hm irgendwie bekomm ich das nicht hin!!!! Meinst du du kannst mir das vielleicht in nem einfach extra Beispiel machen!! Weil egal was ich mache es funzt net!!! :confused:

Serge
09.09.2003, 08:05
Vielleicht wär es einfacher wenn du denn teil deiner db mal uploadest und ich mir das mal anschau.Hab momentan zwar viel zu tun aber ich schau mal was geht.

[CoNveX]
11.09.2003, 11:33
Ok das wäre echt nett, hab das grad mal nochmal gebastelt! Weil das alte so durcheinander war. Hab aber keine tollen Namen vergeben also "bad programming style". Und optisch auch nichts angeordnet! Und ich hab noch so nen timepicker eingefügt, vielleicht kannst du mir auch noch sagen wie ich das Datum in die Tabelle bekomm! danke

Serge
11.09.2003, 11:54
mies.Du hast dein Projekt mit VS2003 erstellt.Ich bekomme erst nächste Woche das Upgrade aber dann kümmer ich mich drum.Hoffe du hast nicht all zu grossen Zeitdruck.

[CoNveX]
11.09.2003, 13:04
Nein das eilt nicht, ich mache das für mich!!!! Danke schonmal!

[CoNveX]
23.09.2003, 16:33
@ Serge

hattest du schon Zeit, dir das Zeil anzuschauen??

mfg Con

Serge
24.09.2003, 09:05
Ich hab leider immernoch kein Vs2k3.
Das geht mir voll auf den Sack.Weil mein Projekt welches ich hier auf der Arbeit mache nur damit fertiggestellt werden kann.
Tja in unserem Konzern drehen sich die Räder halt ziemlich langsam. :mad:

[CoNveX]
24.09.2003, 13:02
Ok schade! Für mich und für dich! :p

gruß