2013-09-15 9 views
5

У меня есть сетка с 3 колонками - Edit, ID, Movie. Я хотел бы добавить нижний колонтитул с кнопкой «Вставить ссылку», 2 текстовыми полями соответственно, но не смог этого сделать. Является ли это возможным.Как добавить нижний колонтитул в gridview

ASPX:

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False"  
OnRowEditing="gridview1_RowEditing" 
OnRowCancelingEdit="gridview1_RowCancelingEdit" 
    ShowFooter="true" > 
    <Columns> 
    <asp:CommandField ShowEditButton="true" ShowDeleteButton="true" /> 
     <asp:BoundField DataField="id" HeaderText="ID" /> 
     <asp:BoundField DataField="movie" HeaderText="MOVIE" /> 
    </Columns> 
</asp:GridView> 

Когда я пытаюсь следующее, есть ошибка для CommandField, который говорит, этот элемент не поддерживается.

<Columns> 
<asp:TemplateField> 
    <ItemTemplate> 
    <asp:CommandField ShowEditButton="true" ShowDeleteButton="true" /> 
    </ItemTemplate> 
<FooterTemplate> 
    <asp:LinkButton ID="lnkInsert" runat="server" Text="Insert"></asp:LinkButton> 
</FooterTemplate> 
</asp:TemplateField> 
</columns> 

Другой способ заключается в использовании ItemTemplate & EditTemplate для каждого элемента управления столбца. Но я нахожу это простым и хотел бы продолжить этот путь. Могу ли я добавить нижний колонтитул в эту структуру. enter image description here

ответ

9

ДА, Возможно. Но для этого потребуется использовать <FooterTemplate> внутри <TemplateField>. Для каждого столбца используйте TemplateFields, а также установите FooterTemplate для каждого столбца.

ПРИМЕЧАНИЕ: Столбец ID представляется здесь основным ключом. Поэтому удалите <FooterTemplate> из соответствующего <TemplateField>, определенного для столбца ID, если ID является Первичным ключом или автоматически созданным полем в вашей базе данных.

ПРИМЕЧАНИЕ II:<FooterTemplate> просто будет содержать только текстовое поле.

<Columns> 
<asp:TemplateField> 
    <EditItemTemplate> 
      <asp:LinkButton ID="lnkBtnUpdate" runat="server" CausesValidation="True" 
         CommandName="Update" Text="Update"></asp:LinkButton> 
         &nbsp;<asp:LinkButton ID="lnkBtnCancel" runat="server" 
         CausesValidation="False" 
         CommandName="Cancel" Text="Cancel"> 
      </asp:LinkButton> 
    </EditItemTemplate> 
    <FooterTemplate> 
      <asp:LinkButton ID="lnkBtnInsert" runat="server" 
       CommandName="Insert">Insert</asp:LinkButton> 
    </FooterTemplate> 
    <ItemTemplate> 
      <asp:LinkButton ID="lnkBtnEdit" runat="server" CausesValidation="False" 
          CommandName="Edit" Text="Edit"></asp:LinkButton> 
          &nbsp;<asp:LinkButton ID="lnkBtnDelete" runat="server" 
          CausesValidation="False" 
          CommandName="Delete" Text="Delete"> 
      </asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="ID"> 
    <EditItemTemplate> 
      <asp:TextBox ID="TextBoxID" runat="server" Text='<%# Bind("ID") %>'> 
      </asp:Label> 
    </EditItemTemplate> 
    <ItemTemplate> 
      <asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'> 
      </asp:Label> 
    </ItemTemplate> 
    <FooterTemplate> 
     <asp:TextBox ID="txtID" runat="server"></asp:TextBox> 
    </FooterTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="MOVIE"> 
    <EditItemTemplate> 
      <asp:TextBox ID="TextBoxMovie" runat="server" Text='<%# Bind("Movie") %>'></asp:TextBox> 
    </EditItemTemplate> 
    <FooterTemplate> 
      <asp:TextBox ID="txtMovie" runat="server"></asp:TextBox> 
    </FooterTemplate> 
    <ItemTemplate> 
      <asp:Label ID="Label2" runat="server" Text='<%# Bind("Movie")%>'> 
      </asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

В настоящее время существует 2 способа вставки данных. Либо вы можете использовать событие GridView OnRowCommand, либо вы можете обработать событие OnClick вашей кнопки «Вставить».

+0

Thank You. Я знаю об этом методе, но искал другие альтернативы, как упоминалось. Процедура, о которой идет речь, автоматически превратит поля в режимы ввода при щелчке правой кнопкой мыши без какого-либо дополнительного кода. Но похоже, что это единственный способ. Это так? Кстати, я использовал insertvisible = true & false в , но это не имеет никакого значения. Зачем? – Ruby

+0

Да, это единственный способ на данный момент. В основном GridView не поддерживает вставку записей так, как он поддерживает Edit/Update. Таким образом, невозможно автоматическое превращение полей в режимы ввода, потому что GridView никогда не будет отображаться в INSERT MODE. Кроме того, свойство InsertVisible не поддерживается для GridView, опять же потому, что GridView не поддерживает InsertMode. Я заблуждаюсь для деталейView. Проверьте эти 2 ссылки для получения дополнительной информации: http: //geekswithblogs.net/casualjim/articles/51360.aspx, MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datacontrolfield .insertvisible.aspx –

+0

Обновлен мой ответ для свойства InsertVisible. Просто удалите столбец для идентификатора, если ID является первичным ключом ИЛИ автоматически созданным полем в вашей базе данных –

0

Вы не можете поместить командное поле внутри TemplateField. Но может делать следующее:

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False"  
OnRowEditing="gridview1_RowEditing" 
OnRowCancelingEdit="gridview1_RowCancelingEdit" 
    ShowFooter="true" > 
     <Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <!--To fire the OnRowEditing event.--> 
      <asp:LinkButton ID="lbEdit" runat="server" CommandName="Edit" 
       Text="Edit"> 
      </asp:LinkButton> 
      <!--To fire the OnRowDeleting event.--> 
      <asp:LinkButton ID="lbDelete" runat="server" CommandName="Delete" 
       Text="Delete"> 
      </asp:LinkButton> 
     </ItemTemplate> 
     <FooterTemplate> 
      <asp:LinkButton ID="lnkInsert" runat="server" Text="Insert"></asp:LinkButton> 
     </FooterTemplate> 
    </asp:TemplateField> 
     <asp:BoundField DataField="id" HeaderText="ID" /> 
     <asp:BoundField DataField="movie" HeaderText="MOVIE" /> 
</Columns>  
</asp:GridView> 
+1

Строка не изменяется в режиме редактирования (текстовые поля) при щелчке по щелчку с помощью этого метода. Однако, спасибо. – Ruby

+0

Вы должны установить 'gridview1.EditIndex = e.NewEditIndex;' и снова привязать свои данные так: 'gridview1.DataBind();' внутри вашего события с обновлением строки: 'OnRowUpdated =" gridview1_RowUpdated "'. После установки индекса редактирования и после перезаписи данных ваше gridview отобразит «EditItemTemplate» – DerpyNerd

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