2017-08-30 4 views
0

ASP.net C#一部のGridViewRowでデータを入力する方法と空白を残す方法

私は、ユーザーが実行しなければならない操作の詳細を含む5行のgridviewを作成しています。操作の詳細は、完了したら記入する必要があります。一度に任意の数の操作の詳細を記入することができます。 グリッドビューでは、最初のItemテンプレートにLabel(操作名用)とその他のテキストボックス(その他の詳細)が含まれています。

ユーザーが3行を入力した場合、残りの2行は空白にしてください。

私の問題は、入力可能な2つの最下行を残して、前に入力した3行をバインドする方法です。

私のGridViewのデザインは、次のとおりです。

<asp:GridView CssClass="table-bordered gridStyle" runat="server" ShowFooter="True" 
    ID="grdOperationEntry" GridLines="None" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="Operation"> 
      <ItemTemplate> 
       <asp:Label Text='<%# Eval("operation_title") %>' ID="lblOperationName" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Date of Completion"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" Text='<%# Eval("date_completed") %>' CssClass="form-control" 
        ID="txtDateCompletion" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Time Taken"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" Text='<%# Eval("time_taken") %>' ID="txtTimeTaken" CssClass="form-control" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Score"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" Text='<%# Eval("score_gain") %>' ID="txtScore" CssClass="form-control" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Reported To"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" Text='<%# Eval("reported_to") %>' ID="txtReportedTo" 
        CssClass="form-control" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <AlternatingRowStyle BackColor="White" /> 
    <EditRowStyle BackColor="#7C6F57" /> 
</asp:GridView> 

答えて

0

は、GridViewの中のすべてのTextBoxとラベルを追加し、それらに目に見える偽を設定し、データベースからラベルもバインド。私はあなたが他のすべてのためにそれを行うことができ、以下に例TemplateFieldを追加しました:

protected void grdOperationEntry_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    // check if gridview row not a header or footer 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // get controls by id from gridview and cast them 
     Label lblDateCompletion = e.Row.FindControl("lblDateCompletion") as Label; 
     TextBox txtDateCompletion = e.Row.FindControl("txtDateCompletion") as TextBox; 

     if (lblDateCompletion.Text == null) 
      txtDateCompletion.Visible = true; 
     else 
      lblDateCompletion.Visible = true; 

     // perform same for other controls 
    } 
} 

注:OnRowDataBoundを追加することを忘れないでくださいRowDataBound場合に

..... 
<asp:TemplateField HeaderText="Date of Completion"> 
    <ItemTemplate> 
     <asp:Label runat="server" Visible="False" Text='<%# Eval("date_completed") 
        ID="lblDateCompletion" %>'></asp:Label> 
     <asp:TextBox runat="server" Visible="False" Text='<%# Eval("date_completed") %>' 
        ID="txtDateCompletion" /> 
    </ItemTemplate> 
</asp:TemplateField> 
..... 

は彼らに真の視認を設定しましたあなたのGridViewへのプロパティ<asp:GridView ID="grdOperationEntry" runat="server" OnRowDataBound="grdOperationEntry_RowDataBound" >

関連する問題