2012-03-31 13 views
0

私は通常、データに基づいてグリッドビューを作成するので、データソースが吐き出されたものに応じて行が作成されますが、今回は..何か別の処理が必要です。私は送信ボタンが、それは、各行を取り、製品を作成します。クリックされたとき、そして、(私はProductクラスを呼び出すだけの特性に行を割り当て、各行に次5行のグリッドビューを作成する

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

で5行を持っている必要がありますし、すべての行について同じように製品を保存します)。

どのようにすることができます私のGridViewにそれらの5つの項目のデータへの依存しない場合は?それは、ヘッダーのようなGridViewの性質を持っている必要があります私はちょうどそれらの5を追加する方法を確認していない

Product Name | Lot # | Image |  Active 

になりますグリッドビューのプロパティを使用したい場合は、データソースに依存しない行を追加します。

私はデータに依存しないgridviewを扱う必要があります。

注:製品を追加するかどうかを決定するために、すべての情報が満たされているかどうかは、何が問題であっても必ず5行になります。

あなたは

答えて

1

まず、のは、マークアップのコントロールとGridViewのを作成してみましょう、と製品を保存するには下のボタン...

<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" /> 

... 。

ここで、5行のセットを生成する必要があります。私たちに今 enter image description here

ちょうど:私たちは、これは、レンダリングのGridViewとして私たちにこれを与え

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(); 
    } 
} 

...我々はPage_Loadに生成することができList<int>にGridViewのを結合することによって、本当に簡単この行うことができますボタンがクリックされたときに行を読み込むコードが必要です。各行のコントロールを検索して値を読み取ります。

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

ありがとう、これは私がこれまで見てきた最も詳細な回答のようです。私は本当にステップバイステップに感謝し、私はそれが多くの人がこの技術を使い始めているのに役立つだろうと確信しています。 – user710502

0

あなたのグリッドビューのデータソースとしてDataTableを使用することができますありがとうございました。 this exampleを見ることができます。

編集:私はthis approachがあなたが必要とするものに適していると思います。

0

Listを作成し、DummyObjの5つの項目をそのリストに追加するだけです。 DummyObjは、必要な列の4つのプロパティを含むヘルパーオブジェクトです。

何か不足していますか?私たちの各行のテキストボックス、ドロップダウンリスト、ファイルアップロードやチェックボックスを与え

関連する問題