2012-03-31 8 views
0

Ich erstelle normalerweise eine Gridview basierend auf Daten, so dass es die Zeilen abhängig davon haben wird, was die Datenquelle ausspuckt, aber diesmal. Ich muss etwas anderes machen. Ich brauche 5 Reihen zu haben, mit dem folgenden auf jeder ZeileErstellen Sie eine Gridview mit 5 Zeilen

TextBox | DropDown | FileUploader | Checkbox 
TextBox | DropDown | FileUploader | Checkbox 
TextBox | DropDown | FileUploader | Checkbox 
TextBox | DropDown | FileUploader | Checkbox 
TextBox | DropDown | FileUploader | Checkbox 

dann, wenn ein Absenden-Schaltfläche geklickt wird, wird es jede Zeile nehmen und ein Produkt erstellen (Ich werde die Produktklasse nennt und nur die Eigenschaften die Zeile zuweisen und speichern Sie das Produkt genauso wie für alle Zeilen).

Wie kann ich diese 5 Elemente in die gridview, wenn sie nicht abhängig von Daten ?, es wird die gridview Eigenschaften haben muß, wie Header

Product Name | Lot # | Image |  Active 

seine Ich bin nur nicht sicher, wie die 5 hinzufügen Zeilen, die nicht von einer Datenquelle abhängig sind, aber dennoch die Eigenschaften von gridview verwenden möchten.

Irgendwelche Ideen würden sehr geschätzt werden, zuerst muss ich mich mit der Gridview beschäftigen, die nicht von den Daten abhängt.

HINWEIS: Es wird immer 5 Zeilen .. egal was und ich werde prüfen, ob alle Informationen ausgefüllt ist, um zu entscheiden, ob das Produkt hinzufügen oder nicht.

Danke

Antwort

1

Lassen Sie uns zuerst die Gridview mit Kontrollen im Markup erstellen, und eine Schaltfläche unterhalb der Produkte zu retten ...

<asp:GridView runat="server" ID="ProductGridview" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateField HeaderText="Product Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="ProductNameTextBox" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Lot #"> 
      <ItemTemplate> 
       <asp:DropDownList runat="server" ID="LotNumberDropDownList"> 
        <asp:ListItem Text="1" /> 
        <asp:ListItem Text="2" /> 
        <asp:ListItem Text="3" /> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Image"> 
      <ItemTemplate> 
       <asp:FileUpload runat="server" ID="ImageFileUpload" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Active"> 
      <ItemTemplate> 
       <asp:CheckBox Text="Active" runat="server" ID="ActiveCheckBox" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
<asp:Button Text="Save Products" runat="server" ID="SaveProductsButton" OnClick="SaveProductsButton_Click" /> 

... gibt uns eine Textbox, Dropdownlist, Fileupload und Kontrollkästchen in jeder Zeile .

Jetzt müssen wir eine Reihe von 5 Zeilen generieren. Wir können dies tun wirklich leicht durch die gridview zu einer List<int> Bindung, die wir in Page_Load erzeugen kann ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     // Generate a list of 5 integers - this will be the data source for the GridView 
     List<int> rows = new List<int>(); 

     for (int i = 0; i < 5; i++) 
     { 
      rows.Add(i); 
     } 

     //Bind the Gridview to the list of integers so we get 5 rows in the UI 
     ProductGridview.DataSource = rows; 
     ProductGridview.DataBind(); 
    } 
} 

Dies gibt uns diese als gerenderte gridview: enter image description here

wir jetzt nur benötige Code, um die Zeilen zurück zu lesen, wenn auf die Schaltfläche geklickt wird; Wir durchlaufen die Zeilen und suchen nach den Steuerelementen in jeder Zeile, um ihren Wert zu lesen ...

protected void SaveProductsButton_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in ProductGridview.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      // Have to cast the result of FindControl to the correct type 
      TextBox productTextBox = (TextBox)row.FindControl("ProductNameTextBox"); 
      DropDownList lotNumberDropDownList = (DropDownList)row.FindControl("LotNumberDropDownList"); 
      FileUpload imageFileUpload = (FileUpload)row.FindControl("ImageFileUpload"); 
      CheckBox activeCheckBox = (CheckBox)row.FindControl("ActiveCheckBox"); 

      saveProduct(productTextBox.Text, lotNumberDropDownList.SelectedItem.Text, 
            imageFileUpload.PostedFile, activeCheckBox.Checked); 
     } 
    } 
} 
+0

Vielen Dank, das ist die detaillierteste Antwort, die ich bisher gesehen habe. Ich schätze die Schritt für Schritt und ich bin mir sicher, dass es vielen Leuten helfen wird, die mit dieser Technologie anfangen. – user710502

0

Sie eine DataTable als Datenquelle für die Rasteransicht verwenden können. Sie können sich this example ansehen.

EDIT: Ich denke, dass this approach ist besser für das, was Sie brauchen.

0

Sie könnten einfach eine Liste erstellen und fünf Elemente von DummyObj zu dieser Liste hinzufügen. DummyObj ist ein Hilfsobjekt, das vier Eigenschaften für die benötigten Spalten enthält.

Oder fehlt mir etwas?

Verwandte Themen