Toon posts:

[ASP.Net] Foreign Keys in DataGrid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo mede tweakers,

Ik heb een tabel met een aantal foreign keys erin.
Nu wil ik die tabel mooi een DataGrid afbeelden.
Dat is nog wel allemaal te doen, die query builder maakt netjes alle joins zodat ik alles waarden (dus niet de ID's) krijg te zien.

Maar nu wil ik die regel ook editen. Maar zodra ik de EditItemIndex op die regel zet krijg ik mooi van die tekst vakjes. En moet ik zelf de ID's intypen.

Om nieuwe toe te voegen heb ik mooi een aantal DropDown boxes gemaakt met alle items erin. Dat werkt allemaal wel.

Maar hoe krijg ik als ik de EditItemIndex op een bepaalde regel zet, ook zo'n DropDown box in die regel.
Ik kan niet van die regel het bepaalde control vervangen door de DropDown.

Heeft iemand hier een oplossing voor?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

[gokmodus]
http://aspalliance.com/das/dgcombo.aspx
http://www.aspalliance.com/wisemonk/view.aspx?id=AD012402
[/gokmodus]
* gorgi_19 is ook wel benieuwd wat je tot nu toe allemaal geprobeerd hebt..

[ Voor 23% gewijzigd door gorgi_19 op 03-02-2003 16:49 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Misschien moet je eens kijken naar een DataList of een DataRepeater, die hebben een EditItemTemplate property.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 03 februari 2003 @ 17:13:
Misschien moet je eens kijken naar een DataList of een DataRepeater, die hebben een EditItemTemplate property.
Een datagrid toch ook?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Die heeft een EditItemStyle, en ik denk niet dat je daarmee kunt aangeven welke controls er moeten gebruikt worden.... Maar je kan gelijk hebben hoor.
* whoami is ff te lui om het uit te vissen. :+

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Hallo,

ik ben een beetje naar de voorbeelden zitten kijken.
En zover als ik kom, moet ik een template kolom aanmaken, waarin ik in de EditItemTemplate een bepaald component zet.

Maar nu is de vraag.....
krijg krijg van mijn data die ik uit de database haal (op design time) geen template kolom.

Ik krijg alleen de kolommen die ik in de query heb gezet. Die krijg ik ook niet te zien bij propertie pages van mijn datagrid.

kan iemand mij misschien een beetje verder op weg helpen ??

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 snapt niets van je verhaal :?
Je krijgt een kant en klaar voorbeeld voorgeschoteld. Waar gaat het fout? Wat begrijp je niet? Graag ook gedocumenteerd met stukjes relevante code.
Ik krijg alleen de kolommen die ik in de query heb gezet. Die krijg ik ook niet te zien bij propertie pages van mijn datagrid.
Property page? :? In Visual Studio? Een template column moet je enigszins handmatig aanmaken.

[ Voor 39% gewijzigd door gorgi_19 op 04-02-2003 13:07 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ja, ik weet dat je die template column zelf moet maken. En daar krijg ik ook wel een dropdown in,
maar ik krijg mijn data uit mijn dataset dan niet in die (template)columns.
Ik krijg alleen de columns te zien, die ik mijn select gedeelte van mijn query heb staan. (Alle andere (template) columns zijn gewoon leeg.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

Kijk eens goed naar de code:

ASP:
1
2
3
4
5
6
7
8
  protected DataTable GetProducts(int SupplierID){
    SqlDataAdapter SqlDa = new SqlDataAdapter("SELECT ProductName, ProductID FROM Products WHERE SupplierID = @SupplierID", SqlCon);
    SqlDa.SelectCommand.Parameters.Add(new SqlParameter("@SupplierID", SqlDbType.VarChar, 100));
    SqlDa.SelectCommand.Parameters["@SupplierID"].Value = SupplierID;
    DataSet ds = new DataSet();
    SqlDa.Fill(ds, "ProductList");
    return ds.Tables["ProductList"];
  }

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
         <EditItemTemplate>

            <TABLE Width="100%" CellPadding="0" CellSpacing="0" Border="0">
              <TR>
                <TD Style="font-size:8" Width="20%">
                  <b>CHANGE -</b>
                </TD>
                <TD>
                  <asp:DropDownList
                    Runat="server"
                    Id="edit_Product"
                    DataSource='<%# GetProducts((int)DataBinder.Eval(Container.DataItem, "SupplierID")) %>'
                    DataTextField="ProductName"
                    DataValueField="ProductID"
                    Width="200" />
                </TD>
              </TR>
              <TR>
                <TD Style="font-size:8" Width="20%">
                  <b>TO - </b>
                </TD>
                <TD>
                  <asp:TextBox
                    id="NewProductName"
                    runat="Server"
                    Width="200" />
                </TD>
              </TR>
            </TABLE>

          </EditItemTemplate>

[ Voor 17% gewijzigd door gorgi_19 op 04-02-2003 13:42 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ja, zoals in mijn vorige reply te lezen is, is het maken van een template column wel gelukt, en kreeg ik daar ook een dropdown box in.

MAAR !!!

De data die ik uit mijn dataset haal, komt NIET in de template columns die ik gemaakt heb. Niet in "vieu" (ItemTemplate) mode en ook niet in edit mode.
De data komt in een kolom met de titel van het veld uit de db.

Dus
hoe krijg ik de data uit mijn dataset in die template column

[ Voor 9% gewijzigd door Verwijderd op 04-02-2003 14:09 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

ASP:
1
DataSource='<%# GetProducts((int)DataBinder.Eval(Container.DataItem, "SupplierID")) %>'

?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
OK, na nog een keer alles door lezen kreeg ik er zelf ook al data in.

Maar nu het probleem
code:
1
2
3
SELECT     testtabel.tekst, testtabel2.tekst AS Expr1
FROM         testtabel INNER JOIN
                      testtabel2 ON testtabel.ID = testtabel2.fid

Let niet op de rare naampjes, het is maar om te testen.

Dit is dus de query die ik in de grid zet.
Die zet zelf netjes 2 kollommen erin.
(Maar dan heb ik dus ook nog mijn eigen template column)

Hoe krijg ik dan dat ik die ene kolom, die ik in mijn template column niet meer automatisch uit de querie in beeld zet.

Verwijderd

Topicstarter
Ok het is inmiddels al weer bijna gelukt.

Ik zit nu met het probleem:
ik zet alle code in de aspx.vb file. Nu wil ik dus de DataSource van de DropDownList die ik gemaakt heb vullen.
Daarvoor heb ik dus een functie de een executeReader returned.
Dat werkt dus nog niet helemaal goed.
Als ik exeExecuteReader(CommandBehavior.CloseConnection) uitvoer en daarna op de pagina op update ofzo klik, zegt dat mijn connection nog open is.

Ik kan de connectie ook niet eerder sluiten, omdat ander mijn reader ook weer leeg is.
Hoe kan ik dit oplossen ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Een DataReader moet je voor zover ik weet altijd expliciet sluiten als je hem niet meer nodig hebt.
En dat is eigenlijk ook de beste manier om met connecties om te gaan. Van zodra je de connectie niet meer nodig hebt -> sluiten.
Trouwens, als je eenmaal door je reader gelooped hebt, waarom zou je hem dan nog openlaten? Je kan er verder niets meer mee, aangezien je het kan beschouwen als een 'forward only cursor'.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het zit dus zo,
ik gebruik zo iets al het dit voorbeeld:
http://aspalliance.com/das/dgcombo.aspx
code:
1
2
3
4
5
6
7
8
9
    Private Function BindState()
        Dim myConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
        Dim myCommand As SqlCommand = New SqlCommand("sp_das_state_sel", myConnection)

        myCommand.CommandType = CommandType.StoredProcedure

        myConnection.Open()
        Return myCommand.ExecuteReader(CommandBehavior.CloseConnection)
    End Function


Ik vul dus met een functie de datasource van een dropdownlist.
Maar ik kan dus niet zeggen als ie de dataset gevult heeft dat ie de connectie en reader mag sluiten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Dan zul je hem zelf moeten sluiten als je hem niet meer nodig hebt....

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het probleempje met de connection is al opgelost, zat em in de DataBind die die aanriep.

Maar nu heb ik een ander vraagje:
Als je "AutoGenerateColumns" hebt aan staan, dan komen automatisch alle velden aan die je in je select stuk van query hebt staan in de grid te staan.
Moet ik dan persee die "AutoGenerateColumns" op false zetten en van alle kollomem template kollomen maken? Omdat ik kolom niet wil zien (die pas ik aan met die dropdownlist).

En kan ik zelf direct data uit een DataSet halen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Je kunt AutoGenerate columns op False zetten, en dan zoals je zelf zegt alle columns handmatig gaan toevoegen (kijk eens naar de BoundColumn class).
Je kunt natuurlijk ook de columns die je niet wilt zien invisible maken.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Verwijderd schreef op 05 februari 2003 @ 11:10:

En kan ik zelf direct data uit een DataSet halen?


Ja.
Maak toch eens gebruik van die MSDN of die help die bij de .NET SDK zit....

https://fgheysels.github.io/

Pagina: 1