2013-03-27 7 views
1

Не могу поверить, что я должен спросить об этом - вы бы подумали, что такая базовая функция была бы простой в реализации, но мне не удается создать нижний колонтитул для Gridview. Я проверил различные уроки и другие вопросы, такие как here и here и here, но я все еще сталкиваюсь с трудностями.Почему нижний колонтитул Gridview добавляет дополнительную колонку?

Проблема заключается в правильном отображении нижнего колонтитула (т. Е. Без добавления лишнего пустого столбца). Из того, что я собираю, вам нужно поместить FooterTemplate внутри тега TemplateField, иначе он не сработает - по крайней мере, он не будет компилироваться для меня. Если я вставляю это после столбцов BoundFields, он добавляет дополнительный столбец, который нежелателен.

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" AllowSorting="true" 
    CellPadding="3" HorizontalAlign="Center" GridLines="both" CssClass="dataTable1" 
    OnRowDataBound="Colour_Columns" Caption="PARTIAL COMPARE" ShowFooter="true"> 
    <HeaderStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="header" /> 
    <FooterStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="footer" /> 
    <Columns> 
     <asp:BoundField DataField="FOLDER" HeaderText="Location" /> 
     <asp:BoundField DataField="FILE" HeaderText="File" /> 
     <asp:BoundField DataField="CHECKSUM" HeaderText="Checksum" Visible="false" /> 
     <asp:BoundField DataField="STATUS" HeaderText="Status" /> 
     <asp:BoundField DataField="DATE" HeaderText="Date" Visible="false" /> 
     <asp:TemplateField> 
      <FooterTemplate> 
       <asp:Button ID="UpdateButton" runat="server" Text="UPDATE" CssClass="updateButton" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

enter image description here

Точно так же, если я ставлю его перед BoundFields добавляет дополнительный столбец слева. Если я попытаюсь поместить все BoundFields под TemplateField, он не будет компилироваться.

Как добавить нижний колонтитул в gridview, не создавая дополнительный столбец? Кроме того, пока мы на нем, как я могу установить его colspan равным 1? (Это не только собирается иметь кнопку один Update в нем, поэтому нет необходимости для трех столбцов в сноске.)

Цветовая схема метода:

protected void Colour_Columns(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.Cells[3].Text == "Match") 
      e.Row.BackColor = Color.Lime; 
     if (e.Row.Cells[3].Text == "Mismatch") 
      e.Row.BackColor = Color.Gold; 
     if (e.Row.Cells[3].Text == "New File") 
      e.Row.BackColor = Color.PeachPuff; 
    } 
} 

Этот метод, кажется, не признают ItemTemplate значения ...

+0

вы добавили еще одно поле шаблона, поэтому оно показывает вам лишний пустой столбец с кнопкой в ​​нижнем колонтитуле. –

+0

@CodeRider да, но если я не добавлю TemplateField, он не позволит FooterTemplate ... – user1985189

+0

именно то, что вы хотите? Вы скрываете несколько столбцов во время выполнения. Если вы скроете столбец, то нижний колонтитул скроется. пожалуйста, уточните, что вы хотите. –

ответ

3

Попробуйте использовать поле шаблона только для последнего столбца, и в этом столбце вы можете указать ItemTemplate и FooterTemplate. Попробуйте код ниже.

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" AllowSorting="true" 
    CellPadding="3" HorizontalAlign="Center" GridLines="both" CssClass="dataTable1" 
    OnRowDataBound="Colour_Columns" Caption="PARTIAL COMPARE" ShowFooter="true"> 
    <HeaderStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="header" /> 
    <FooterStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="footer" /> 
    <Columns> 
     <asp:BoundField DataField="FOLDER" HeaderText="Location" /> 
     <asp:BoundField DataField="FILE" HeaderText="File" /> 
     <asp:BoundField DataField="CHECKSUM" HeaderText="Checksum" Visible="false" /> 
     <asp:TemplateField HeaderText="Status"> 
      <ItemTemplate> 
        <asp:Label ID="StatusLabel" runat="server" Text='<%# Eval("STATUS") %>' /> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:Button ID="UpdateButton" runat="server" Text="UPDATE" CssClass="updateButton" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="DATE" HeaderText="Date" Visible="false" /> 
    </Columns> 
</asp:GridView> 

Я изменил файл Cs, чтобы прочитать значение из поля шаблона. Пожалуйста, переписывание на ASPX, чтобы becouse я изменил его тоже путем добавления идентификатора ярлыке

CS:

protected void Colour_Columns(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Label StatusLabel = e.Row.FindControl("StatusLabel") as Label; 
     if (StatusLabel.Text == "Match") 
      e.Row.BackColor = Color.Lime; 
     if (StatusLabel.Text == "Mismatch") 
      e.Row.BackColor = Color.Gold; 
     if (StatusLabel.Text == "New File") 
      e.Row.BackColor = Color.PeachPuff; 
    } 
} 
+1

, чтобы закрыть ярлык метки. –

+0

сделано, спасибо – Marseld

+0

ОК. Мне нужно было добавить закрывающий скобку> и отметить этикетке и изменить «sever» на сервер, но это сработало! Дело только в том, что теперь он отображает данные, которые я не хочу – user1985189

2

Вы не должны использовать FooterTemplate с BoundField. Шаблоны нижнего колонтитула предназначены для использования в сочетании с TemplateField. Кроме того, применяются шаблоны нижнего колонтитула за столбец, это делается для того, чтобы вы могли суммировать итоговые значения в нижней части сетки в тех случаях, когда у вас есть числовые данные.

Вот пример использования полей шаблона с поля колонтитула в первом столбце, вы можете изменить это в соответствии с требованиями, чтобы удовлетворить ваши потребности:

ASPX:

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" ShowFooter="true"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="lblFolder" runat="server" Text='<%# Eval("FOLDER") %>' /> 
       </ItemTemplate> 
       <FooterTemplate> 
        Footer content displayed under FOLDER, notice no extra column! 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="lblFile" runat="server" Text='<%# Eval("FILE") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="lblCheck" runat="server" Text='<%# Eval("CHECKSUM") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

Результат:

enter image description here

В качестве альтернативы, вы можете придерживаться с помощью BoundFields и добавить колонтитул динамически в коде:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Footer) 
    { 
     var footer = new Label(); 
     footer.Text = "Footer content"; 
     //Footer will be displayed under the *first* column 
     e.Row.Cells[0].Controls.Add(footer); 
    } 
} 
+0

Ах, я просто понял, что они также могут использоваться как обратная подпись. Поскольку я использую BoundFields, должен ли я просто добавить еще одну строку внизу и отказаться от этой работы нижнего колонтитула? – user1985189

+1

Это зависит от вас, вы можете добавить некоторый контроль прямо под сетку или переструктурировать свою разметку, чтобы использовать TemplateFields вместо BoundFields, ваш выбор! –

0

Как кодировать эту форму:

ЗАКАЗА MASTER [lblPONumberH]
PO Номер: // здесь is textBox // RequireField PO Дата: // здесь istextbox с расширителем календаря Продавец: // здесь выпадающий список Создано: // здесь текстовое поле сохранить // Кнопка Отмена // Кнопка GridView

Описание товара Бюджет Количество Количество Единица измерения Цена DataBound DataBound DataBound DataBound DataBound Edit & Del БТН
в колонтитула стиле txtItemDescription ddlBnumber txtQuantity ddlUOM txtPrice AddBtn

Смежные вопросы