如何填充一些GridViewRow中的数据并留下一些空白

时间:2017-08-30 06:41:52

标签: c# asp.net gridview

ASP.net C#

我正在创建一个包含5行的gridview,其中包含用户必须执行的操作的详细信息。操作细节应在完成后填写。一次可以填写任意数量的操作细节。 在gridview中,第一个Item-template包含Label(用于操作名称),其他包含textbox(用于其他详细信息)。

如果任何用户填写了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>

1 个答案:

答案 0 :(得分:0)

在GridView中添加一个包含所有TextBox的Label,并将它们设置为false,并从数据库绑定Label。我在下面添加了一个示例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事件中,将它们设为true:

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