2017-01-30 7 views
0

Я использую Gridview для обработки своих результатов и поставлю его в текстовом поле в ModalPopUp. Прежде всего. Я хочу обработать его, и каким-то образом, когда я использую TemplateField, я не вижу никакого результата в своем предупреждении. Но когда я пытаюсь использовать BoundField, результат показывает. Я не знаю, если это потому, что я могу показать только boundField или что я делаю неправильно. Вот часть кода, которую я использую для этой конкретной части. Everytime я использую TemplateField он не будет работать :(Шаблон Поле не отображается, следует использовать BoundField? (не работает)

<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); 
    } 
+0

Что происходит здесь, когда вы используете TemplateField? string email = row.Cells [7] .Text; – Seano666

+0

Завершить пустой. Пустое предупреждение. –

+0

TemplateField, вероятно, создает контейнер, и ваш контроль находится внутри контейнера. Чтобы узнать, вам нужно выполнить некоторую базовую отладку, установить точку останова и проверить row.Cells [7], чтобы узнать, где находится ваш элемент управления. – Seano666

ответ

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> 

и в чеке CheckBox, замените этот

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

с этим

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

Это решит проблему, я проверял.

Надеюсь, это поможет. С уважением!