![]() |
SqlDataSource - Selects definieren
Hallo,
ich habe eine kleine Tabelle Zitat:
Delphi-Quellcode:
Ein GridView zeigt das Ergebnis (PLZ + Ort) an. Bei "06130":
<SelectParameters>
<asp:ControlParameter ControlID="TextBoxPlz" Name="PLZ" PropertyName="Text" Type="String" /> </SelectParameters> Zitat:
Der Nutzer soll nun einen Datensatz auswählen und dann soll eine Tabelle mit allen zugehörigen Straßennamen angezeigt werden. Wie kann ich mich hier auf BEIDE Spalten des ersten GridViews beziehen? Mir gelingt es nur, den Inhalt eines Feldes zu übergeben, z.B. die PLZ.
Delphi-Quellcode:
Im SelectedValue kann ich ja nur einen Parameter übergeben...
<asp:SqlDataSource ID="SqlDataSourceStreet" runat="server"
ConnectionString="<%$ ConnectionStrings:E:\Programme\WebSiteEt\EtConnectionString %>" ProviderName="<%$ ConnectionStrings:E:\Programme\WebSiteEt\EtConnectionString.ProviderName %>" SelectCommand="SELECT DISTINCT "PLZ", "CITY", "STREET" FROM "OBJECTS" WHERE ("PLZ" = ?)" onselecting="SqlDataSourceStreet_Selecting"> <SelectParameters> <asp:ControlParameter ControlID="GridViewPlz" Name="PLZ" PropertyName="SelectedValue" Type="String" /> </SelectParameters> </asp:SqlDataSource> Ich muss jedoch PLZ + Ort als Parameter übergeben, damit das eindeutig ist... Muss ich dazu in den Pascal-Teil? Und wie übergebe ich dort beide Parameter an die zweite SqlDataSource? Google hilft mir nicht - von Euch jemand? Stahli PS: Die Datenbank will ich gern in dieser Form bestehen lassen und nicht normalisieren. |
Re: SqlDataSource - Selects definieren
Hi stahli,
zuerst einmal warum "DISTINCT" der Befehl gibt nur Daten zurück die nicht doppelt sind. Brauchst Du das? Zum anderen gibt es ausser "WHERE" auch noch das "AND" z.B
SQL-Code:
Uwe
SELECT * from Tabelle
WHERE PlZ = plz AND = auch noch was anderes |
Re: SqlDataSource - Selects definieren
Hi Uwe,
mein Problem ist weniger die Select-Klausel, als vielmehr die "automatische Verwendung" der GridView-Felder-Inhalte der WebSite als Parameterübergabe. Der Nutzer soll die - PLZ - dazu eine zugehörige Stadt - dazu eine zugehörige Straße - dazu eine zugehörige HausNr auswählen. In der Tabelle kann es für mehrere Städte die gleiche Straße und natürlich sehr häufig die gleiche HausNr geben. Wurde eine PLZ + Stadt ausgewählt würde ohne DISTINCT in der nächsten Abfrage die PekingerStr so oft angezeigt, wie es HausNr gibt - das will ich an der Stelle natürlich nicht. Inzwischen denke ich, dass ich die Parameter in der Changed-Behandlung des GridView im Pascal-Teil von Hand zuweisen muss und werde das in dieser Richtung einmal versuchen. Wenn es um die Verwendung EINES Parameters geht, kann man im Prism sehr einfach ein Control zuweisen (z.B. ein Textfeld) und dessen Inhalt wird automatisch z.B. für eine Where-Klausel als Parameter verwendet (hierfür muss man keine Zeile Code schreiben!). Ich möchte aber 2 bzw. 3 Feldinhalte eines GridView für die nächste Abfrage übergeben!? Stahli |
Re: SqlDataSource - Selects definieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe es jetzt so gelöst, dass ich die Abfrageergebnisse sequenziell in Labels.Text ablege. In meinem Fall ist es ohnehin sinnvoll, die "ausgewählten Daten" im Webform anzuzeigen. Weiterhin habe ich die Teile der WebSite in Panels abgelegt, die ich einfach ein- und ausblende. Ist das zu umständlich oder ein korrekter Weg? Es scheint mir zumindest inzwischen ein üblicher und korrekter Weg zu sein, Zwischeninformationen in sichtbaren oder versteckten Textobjekten zu speichern, damit die Daten bei der nächsten "Rundreise" (also dem nächsten Seitenaufruf) noch zur Verfügung stehen. (Daneben gäbe es noch die Möglichkeit, Daten in einer Session oder Applikation zu speichern.) Also sollte meine Lösung soweit korrekt sein. Nun möchte ich jedoch die Anzahl der Datensätze einer SqlDataSource abfragen. Ich finde jedoch nur die Möglichkeit, die Anzahl der Zeilen eines GridViews zu ermitteln. Allerdings setze ich eine ListBox ein, die offenbar nicht die Anzahl der Records der verbunden SqlDataSource zurück gibt:
Delphi-Quellcode:
namespace;
interface uses System, System.Data, System.Configuration, System.Web, System.Web.Security, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.WebControls.WebParts, System.Web.UI.HtmlControls; type _Default = public partial class(System.Web.UI.Page) protected method SqlDataSourceCity_Selecting(sender: System.Object; e: System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs); method ListBoxUser_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); method ListBoxHouse_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); method ListBoxStreet_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); method ListBoxCity_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); method TextBoxPlz_TextChanged(sender: System.Object; e: System.EventArgs); method Page_Load(sender: Object; e: EventArgs); method DefineData; end; implementation method _Default.DefineData; var NotFound: Boolean; begin NotFound := False; PanelPlz.Visible := LabelPlz.Text <> ''; PanelCity.Visible := LabelCity.Text <> ''; PanelCitySelect.Visible := (LabelCity.Text = '') and (LabelPlz.Text <> '') and (not NotFound); PanelStreet.Visible := LabelStreet.Text <> ''; PanelStreetSelect.Visible := (LabelStreet.Text = '') and (LabelCity.Text <> '') and (not NotFound); PanelHouse.Visible := LabelHouse.Text <> ''; PanelHouseSelect.Visible := (LabelHouse.Text = '') and (LabelStreet.Text <> '') and (not NotFound); PanelUser.Visible := LabelUser.Text <> ''; PanelUserSelect.Visible := (LabelUser.Text = '') and (LabelHouse.Text <> '') and (not NotFound); end; method _Default.Page_Load(sender: Object; e: EventArgs); begin if LabelPlz.Text = '' then DefineData; end; method _Default.TextBoxPlz_TextChanged(sender: System.Object; e: System.EventArgs); begin LabelPlz.Text := TextBoxPlz.Text; LabelCity.Text := ''; LabelStreet.Text := ''; LabelHouse.Text := ''; LabelUser.Text := ''; DefineData; end; method _Default.ListBoxCity_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); begin LabelCity.Text := ListBoxCity.SelectedValue; DefineData; end; method _Default.ListBoxStreet_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); begin LabelStreet.Text := ListBoxStreet.SelectedValue; DefineData; end; method _Default.ListBoxHouse_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); begin LabelHouse.Text := ListBoxHouse.SelectedValue; DefineData; end; method _Default.ListBoxUser_SelectedIndexChanged(sender: System.Object; e: System.EventArgs); begin LabelUser.Text := ListBoxUser.SelectedValue; DefineData; end; method _Default.SqlDataSourceCity_Selecting(sender: System.Object; e: System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs); begin PanelNotFound.Visible := ListBoxCity.Rows = 0; // ??????????????????????????????????? PanelNotFound.Visible := SqlDataSourceCity.Records = 0; // ??????????????????????????????????? DefineData; end; end. Also in der letzten Ereignisbehandlung möchte ich die Anzahl der gefundenen Datensätze ermitteln und davon abhängig die Abschnitte der Seite (Panels) ein- und ausschalten. Anbei auch ein kleines Bild der "WebSite". Wo finde ich denn eine Übersicht über die alle Attribute der Net.-Controls? stahli |
Re: SqlDataSource - Selects definieren
...also so geht es:
Delphi-Quellcode:
Stahli
procedure MyProc;
var dr: DataRowView; oDataView: DataView; _DataSourceSelectArguments: DataSourceSelectArguments; begin _DataSourceSelectArguments := new DataSourceSelectArguments; oDataView := DataView(SqlDataSource1.Select(_DataSourceSelectArguments.Empty)); if oDataView <> nil then begin for I := 0 to oDataView.Count - 1 do begin dr := oDataView[I]; xxx := dr.Item['XXX'].ToString; ... end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz