Αν δεν έχετε χρόνο ή διάθεση αρκεστείτε στο ερώτημα του τίτλου. Αν πάλι έχετε διάθεση να προτείνετε καλύτερη υλοποίηση ή ιδέα ακολουθεί η αναλυτική περιγραφή.
έχω φτιάξει ένα User control το οποίο έχει 2 dropdownlists τα οποία γεμίζουν από 2 LinqDataSources αντίστοιχα και το ένα φιλτράρεται από την επιλογή του άλλου.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Κατηγορία<asp:DropDownList ID="DropCat" runat="server" AutoPostBack="True" DataSourceID="LinqCat" DataTextField="catName" DataValueField="catId" /> Υποκατηγορία<asp:DropDownList ID="DropSubCat" runat="server" DataSourceID="LinqSubCat" DataTextField="subName" DataValueField="subId" />
<asp:LinqDataSource ID="LinqCat" runat="server" ContextTypeName="DataClassesDataContext" TableName="categories" Select="new (catId,catName)" >/
<asp:LinqDataSource ID="LinqSubCat" runat="server" ContextTypeName="DataClassesDataContext" TableName="subCategories" Select="new (subId, subName, catId)" Where="catId == @catId"> <WhereParameters> <asp:ControlParameter ControlID="DropCat" DefaultValue="0" Name="catId" PropertyName="SelectedValue" Type="Int32" /> </WhereParameters> </asp:LinqDataSource> |
προφανώς έχει φτιαχτεί το "DataClassesDataContext" με τους αντίστοιχους πίνακες.
Για την επικοινωνία του control με τις σελίδες έχω φτιάξει ένα property το οποίο επιστρέφει στη σελίδα το selectedValue του δεύτερου dropdownlist.
1
2
3
4
| public int subId
{
get { return Convert.ToInt32(DropSubCat.SelectedValue); }
} |
Μέχρι εδώ όλα είναι καλά. Τι γίνεται όμως όταν η σελίδα πρέπει να περάσει τιμή στο control; Σκέφτομαι ότι θα πρέπει πλέον το property μου να αποκτήσει και set ( αφού δεν θα είναι πλέον readonly ). Αυτό που θα πρέπει να γίνεται μέσα στο set είναι να βρίσκω το αντίστοιχο catId μέσα στα δεδομένα του LinqSubCat για να το βάλω selectedValue στο DropCat. Αλλά πώς διαβάζω τα δεδομένα ενός LinqDataSource μέσα από τον κώδικά μου;
υγ: η μετάβαση από vb σε c# είναι βασανιστική, η c που κάναμε στο πανεπιστήμιο ελάχιστα βοηθάει.