模板字段不显示,应该使用BoundField? (不工作)

时间:2017-01-30 17:52:41

标签: c# asp.net gridview datagridview

我正在使用Gridview来处理我的结果vía复选框并计划将其显示在ModalPopUp的textField中。 首先要做的事情。我想处理它,不知何故,当我使用TemplateField时,我在警报中看不到任何结果。但是当我尝试使用BoundField时,结果确实显示出来。我不知道是不是因为我只能展示一个boundField或者我做错了什么。这是我正在使用的特定部分的代码部分。每次我使用TemplateField都不行:(

<Columns>
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate>
                <asp:CheckBox ID="selectedMail" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
            <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" 
                SortExpression="Id" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Top" />
            <asp:TemplateField HeaderText="Complete Name" SortExpression="FirstName">
                <HeaderStyle HorizontalAlign="Left" />
                <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                <ItemTemplate>
                    <a href='candidato.aspx?key=<%#Eval("Key")%>'>
                     <%# Eval("FirstName") %>
                     <%# Eval("MiddleName") %>
                     <%# Eval("LastName") %>
                     <%# Eval("SecondLastName") %></a>
                    <br />
                    <small><%# GetLabels(Eval("Id").ToString())%></small>
                </ItemTemplate>
                <FooterTemplate>
                    Total candidates: <asp:Label ID="lblTotalApplicants" runat="server"></asp:Label>
                </FooterTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Vacancies" SortExpression="">
                <HeaderStyle HorizontalAlign="Left" />
                <ItemStyle HorizontalAlign="Left" />
                <ItemTemplate>
                    <%# GetVacante(Eval("email").ToString())%> 
                </ItemTemplate>
            </asp:TemplateField>

            <asp:BoundField DataField="Status.Nombre" HeaderText="Status" 
                SortExpression="Status.Nombre" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"  ItemStyle-VerticalAlign="Top" />
            <asp:TemplateField HeaderText="Created Date" SortExpression="CreatedDate">
            <HeaderStyle HorizontalAlign="Left" />
            <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%#  Eval("createdDate", "{0:MMMM dd, yyyy. H:mm}") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Rating" HeaderText="Rating" SortExpression="Rating" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top"  />
            <asp:TemplateField HeaderText="Email" SortExpression="" runat="server">
                <ItemTemplate>
                    <%# Eval("email")%> 
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>

asp.cs这里是它的后端。

public void loadEmail(object sender, EventArgs e)
    {
        String compEmail = "";
        foreach (GridViewRow row in gvApplicants.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                CheckBox selectedMail = (row.Cells[0].FindControl("selectedMail") as CheckBox);
                if (selectedMail.Checked)
                {
                    string email = row.Cells[7].Text;
                    compEmail = compEmail+" "+ email;
                }
            }

        }
        string url = HttpContext.Current.Request.Url.AbsoluteUri;
        string script = "window.onload = function(){ alert('";
        script += compEmail;
        script += "');";
        script += "window.location = '";
        script += url;
        script += "'; }";
        ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
    }

1 个答案:

答案 0 :(得分:0)

这是因为您未在ItemTemplate内使用任何控件,并且它不会在其中提供Text。你需要在它们内部使用一些控制,即Label 替换以下

<asp:TemplateField HeaderText="Email" SortExpression="" runat="server">
    <ItemTemplate>
      <%# Eval("email")%> 
    </ItemTemplate>
</asp:TemplateField>

用这个

<asp:TemplateField HeaderText="Email" SortExpression="">
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("email") %>' />
    </ItemTemplate>
</asp:TemplateField>

并在复选框内检查,替换此

string email = row.Cells[7].Text;
compEmail = compEmail+" "+ email;

用这个

Label email = (row.Cells[7].FindControl("Label1") as Label);
compEmail = compEmail + " " + email.Text;

它将解决您的问题,我已对其进行了测试。

希望它有所帮助。此致!