2017-08-30 25 views
0

ASP.net C#如何在一些GridViewRow的填充數據,並留下一些空白

我創建具有含操作的用戶必須執行的細節5行的GridView控件。操作細節應在完成時填寫。一次可以填寫任何數量的操作細節。 在gridview中,第一個項目模板包含標籤(用於操作名稱),其他是文本框(用於其他細節)。

如果任何用戶填充了3行,那麼剩下的兩行應該是空白的。

我的問題是如何綁定先前填充的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和設置它們上可見的僞並綁定也從數據庫標籤。我添加了一個例子TemplateField下面,你可以做到這一點對所有其他:

..... 
<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> 
..... 

RowDataBound事件將它們可見真:

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財產到你的GridView <asp:GridView ID="grdOperationEntry" runat="server" OnRowDataBound="grdOperationEntry_RowDataBound" >

相關問題