Autor Beitrag
mre_admin
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 25.11.08 16:05 
Hallo,
ich habe ein GridView, das an eine SqlDataSource gebunden ist. Diese bekommt ihre Daten über ODBC von einer IBM/DB2-Datenbank (Also nicht über MS-SQL-Server!)

Nun möchte ich eine DropDownBox als EditItemTemplate einsetzen und den SelectedValue speichern.

ausblenden XML-Daten
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:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:CommandField EditText="[Edit]" UpdateText="[Speichern]" ShowEditButton="True" />
        <asp:TemplateField HeaderText="Erlaubt" SortExpression="SFT_ERLAUBT">
            <EditItemTemplate>
                <asp:DropDownList ID="ddErlaubt" runat="server" SelectedValue='<%# Eval("SFT_ERLAUBT").ToString()=="-1" ? -1 : 0 %>'>
                    <asp:ListItem Value="-1" >Ja</asp:ListItem>
                    <asp:ListItem Value="0" >Nein</asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" Enabled="false" Checked='<%# (Eval("SFT_ERLAUBT").ToString()=="-1") ? true : false %>'/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="ID">
            <EditItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%# Bind("sft_id") %>'></asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%# Bind("sft_id") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:connDB2IT %>" ProviderName="<%$ ConnectionStrings:connDB2IT.ProviderName %>" UpdateCommand="UPDATE RSITAA1.NISFT_SFT SET sft_erlaubt = ? WHERE sft_id = ?">
    <UpdateParameters>
        <asp:FormParameter FormField= "ddErlaubt" />
        <asp:FormParameter FormField="lblID" />
    </UpdateParameters>
</asp:SqlDataSource>

(Der SelectCommand wird bei mir im C# Code während Page_Load gesetzt)

Was passiert:
- Ich klicke auf Edit
- Wähle in meiner DropDownBox einen Wert aus
- Klicke speichern
- Die Seite Läd neu (PostBack)
- Der Wert hat sich nicht geändert

Wie geht das richtig?
Ich habe bis jetzt immer nur Lösungen gefunden die einen MSSQL-Server verwenden und deswegen mit der "[Feld] = @Wert"-Syntax arbeiten können. Ich bin aber leider auf die geschichte mit den Fragezeichen im Query angewisen und da scheint das bis jetzt ja offensichtlich so nicht zu funktionieren
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 25.11.08 16:50 
Hallo,

ODBC ist Schrott. Genauer: OleDb und Odbc sind Notlösungen, die nur dann verwendet werden sollten, wenn es nichts Besseres gibt. Für DB2 gibt es den DB2 DataProvider, der ist unbedingt vorzuziehen.

Die "Geschichte mit den Fragezeichen" ist so eine Sache, da jeder DbProvider die Platzhalter für Parameter nach eigener Vorstellung setzt. Oledb und Odbc benutzen '?'. Andere DbProvider benutzen Parameternamen mit '@' oder ':'; was DB2 macht, weiß ich nicht. Aber abgesehen von dieser Feinheit, den Bezeichnern der Klassen und speziellen Eigenheiten des SQL-Dialekts kannst Du alle Beispiele von MS-SQL direkt nach DB2-SQL übertragen.

Meine Hinweise sind aber offensichtlich nur von allgemeiner Bedeutung und helfen Dir überhaupt nicht. Aber konkret kann ich nichts sagen, da ich von der Arbeitsweise von ASP.NET keinerlei Ahnung habe.

Tut mir leid! Jürgen
mre_admin Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 28.11.08 13:09 
Hmm...
also ich habe ein wenig gegoogelt und dieses Dokument gefunden
Zitat:
Mit DB2 .NET Data Provider können Ihre .NET-Anwendungen auf die folgenden Datenbankmanagementsysteme zugreifen:

* DB2 Universal Database Version 8 für Windows-, UNIX- und Linux-basierte Computer
* DB2 Universal Database Version 6 (oder höher) für OS/390 und z/OS (über DB2 Connect)
* DB2 Universal Database Version 5 Release 1 (oder höher) für AS/400 und iSeries (über DB2 Connect)
* DB2 Universal Database Version 7.3 (oder höher) für VSE & VM (über DB2 Connect)


Wir haben aber die Version 7.0 im Einsatz - also wird das wohl nichts mit dem Dataprovider, oder?

---

Aber mal davon abgesehen: Ich glaube ja irgendwie, dass einfach meine UpdateParamter falsch bestückt sind oder so. Bei Selectquerys in Zusammenhang mit "normalen" text- oder dropdownboxen (also welche, die nicht in einem gridview stecken) klappt das ja auch ganz gut mit den ?-Parametern
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 28.11.08 13:43 
Hmm, wenn es für Eure DB2-Version keinen NET Provider gibt, geht es wohl tatsächlich nicht anders.

user profile iconmre_admin hat folgendes geschrieben Zum zitierten Posting springen:
Aber mal davon abgesehen: Ich glaube ja irgendwie, dass einfach meine UpdateParamter falsch bestückt sind oder so. Bei Selectquerys in Zusammenhang mit "normalen" text- oder dropdownboxen (also welche, die nicht in einem gridview stecken) klappt das ja auch ganz gut mit den ?-Parametern

Ich sehe leider keinen Fehler (sonst hätte ich meinen Beitrag ergänzt). Die ? und die Parameter müssen in der Reihenfolge übereinstimmen; aber das tun sie ja offensichtlich.

Von ASP.NET habe ich keinerlei Ahnung. Unter ADO.NET hätte ich den Verdacht, dass der Datentyp im UpdateCommand und im FormParameter nicht übereinstimmen.

Jürgen