Dans asp.net 2.0, vous pouvez imbriquer une liste déroulante dans une vue en grille. C'est très simple, et ce dont nous parlons ici est le suivant.
Dans chaque liste déroulante, un contenu différent est lié. Par exemple, dans la base de données Northwind, vous pouvez utiliser GRIDVIEW pour afficher chaque catégorie. En même temps, la catégorie de chaque ligne peut être répertoriée sous la forme d'une liste déroulante dropdownlist. Tous les produits ci-dessous. La méthode d'implémentation est présentée ci-dessous.
La première est le code dans la partie page.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="Nom de la catégorie" />
<asp:TemplateField HeaderText="Products">
<ItemTemplate>
< asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Dans la section codebehind,
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
si (!Page.IsPostBack)
{
// C'est parce que Table[1] contient des catégories
GridView1.DataSource
= GetDataSet().Tables[1]
;
}
DataSet privé GetDataSet()
{
string query = @"SELECT p.CategoryID,p.ProductID, p.ProductName FROM Produits p
SELECT c.CategoryID,c.CategoryName FROM Catégories c"
; ;password=123456";
SqlConnection myConnection = new SqlConnection(connectionString);
SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}
Dans le code ci-dessus, nous renvoyons d'abord un ensemble de données typique et le lions à la vue en grille. Notez qu'il y a deux phrases dans l'instruction SQL. La première phrase consiste à renvoyer le produit et la deuxième phrase à renvoyer toutes les catégories. liaison Lors de l'utilisation de GridView, nous utilisons
GridView1.DataSource = GetDataSet().Tables[1];, lie l'enregistrement de catégorie dans la première table à la grille. Ensuite, nous devons traiter la liste déroulante dans la colonne du modèle. Cela peut être fait dans l'événement row_databound. coder comme suit
void protégé GridView1_RowDataBound (expéditeur de l'objet, GridViewRowEventArgs e)
{
DataTable maTable = new
DataColumn productIDColumn = new DataColumn("ProductID");
DataColumn productNameColumn = new DataColumn("ProductName");
maTable.Columns.Add
(
productIDColumn);
= new DataSet();
ds = GetDataSet();
int CategoryID = 0;
expression de chaîne = String.Empty
if (e.Row.RowType == DataControlRowType.DataRow)
{
categoryID = Int32.Parse(e.Row.Cells[0].Text);
expression = "CategoryID = " + CategoryID
ddl = (DropDownList)e.Row.FindControl("DropDownList1")
; ds.Tables[0].Select(expression);
foreach (ligne DataRow en lignes)
{
DataRow newRow = myTable.NewRow();
newRow["ProductID"] = row["ProductID"];
newRow
["ProductName"] = row["ProductName"
]
;
DataSource=
maTable;
ddl.DataTextField = "ProductName";
ddl.DataValueField = "ProductID
"
;
Le principe ici est à peu près le suivant :
Tout d'abord, nous avons créé une table de données, comprenant les colonnes productid et productname, puis nous l'avons liée à la grille, puis nous avons utilisé
CategoryID = Int32.Parse(e.Row.Cells[0].Text);
expression = "CategoryID = " + CategoryID ;
Construisez une expression de filtre, spécifiée ici comme CategoryID, puis transmettez-la
DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1");
DataRow[] lignes = ds.Tables[0].Select(expression);
, recherchez tous les produits dont la catégorie est égale à un certain identifiant de catégorie. Ici, une collection de lignes de données est construite. Enfin, utilisez une boucle.
, ajoutez tous les produits d'une certaine catégorie au datatable, et enfin liez le datatable et la liste déroulante pour réaliser la fonction.