2015-07-09 5 views
0

Я работаю над проектом asp.net, где у меня есть gridview на привязке к странице default.aspx для моей базы данных sql. Когда я нажимаю на определенную строку, она переходит на страницу details.aspx, где вы можете видеть и редактировать детали щелкнутой строки.Доступ к событию кликов Linkbutton в нижнем колонтитуле Gridview

На этой странице details.aspx показан другой вид сетки, в котором я раскрыл нижний колонтитул и добавил и «Вставить» linkbutton и соответствующие элементы управления для каждого столбца, чтобы добавить новую запись в базу данных. У меня есть весь код проекта, но, к сожалению, ничего не происходит, когда я нажимаю кнопку «Вставить» (кроме того, что текст в элементах управления полностью очищен). Исключения не выбрасываются, но запись не добавляется в базу данных. Вот GridView код:

<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" DataKeyNames="ClientId" DataSourceID="SqlDataSource1" ShowFooter="True" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Horizontal"> 
     <AlternatingRowStyle BackColor="#F7F7F7" /> 
     <Columns> 
      <asp:CommandField ShowEditButton="True" /> 
      <asp:TemplateField HeaderText="ClientId" InsertVisible="False" SortExpression="ClientId"> 
       <EditItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ClientId") %>'></asp:Label> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ClientId") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:LinkButton ID="lbInsert" runat="server" CommandName="insert" CausesValidation="false">Insert</asp:LinkButton> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="FirstName" SortExpression="FirstName"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="MiddleName" SortExpression="MiddleName"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("MiddleName") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label3" runat="server" Text='<%# Bind("MiddleName") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="txtMiddleName" runat="server"></asp:TextBox> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="LastName" SortExpression="LastName"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label4" runat="server" Text='<%# Bind("LastName") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Gender" SortExpression="Gender"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Gender") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label5" runat="server" Text='<%# Bind("Gender") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:DropDownList ID="ddGender" runat="server"> 
         <asp:ListItem>M</asp:ListItem> 
         <asp:ListItem>F</asp:ListItem> 
        </asp:DropDownList> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="DateOfBirth" SortExpression="DateOfBirth"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("DateOfBirth") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label6" runat="server" Text='<%# Bind("DateOfBirth") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="txtDOB" runat="server"></asp:TextBox> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="ZipCode" SortExpression="ZipCode"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("ZipCode") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label7" runat="server" Text='<%# Bind("ZipCode") %>'></asp:Label> 
       </ItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="txtZIP" runat="server"></asp:TextBox> 
       </FooterTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> 
     <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> 
     <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" /> 
     <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> 
     <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> 
     <SortedAscendingCellStyle BackColor="#F4F4FD" /> 
     <SortedAscendingHeaderStyle BackColor="#5A4C9D" /> 
     <SortedDescendingCellStyle BackColor="#D8D8F0" /> 
     <SortedDescendingHeaderStyle BackColor="#3E3277" /> 
    </asp:GridView> 

и вот отделенный код:

Private Sub grid1_RowCommand1(sender As Object, e As GridViewCommandEventArgs) Handles grid1.RowCommand 
    If e.CommandName = "insert" Then 
     SqlDataSource1.InsertParameters("FirstName").DefaultValue = DirectCast(grid1.FooterRow.FindControl("txtFirstName"), TextBox).Text 
     SqlDataSource1.InsertParameters("MiddleName").DefaultValue = DirectCast(grid1.FooterRow.FindControl("txtMiddleName"), TextBox).Text 
     SqlDataSource1.InsertParameters("LastName").DefaultValue = DirectCast(grid1.FooterRow.FindControl("txtLastName"), TextBox).Text 
     SqlDataSource1.InsertParameters("Gender").DefaultValue = DirectCast(grid1.FooterRow.FindControl("ddGender"), DropDownList).SelectedValue 
     SqlDataSource1.InsertParameters("DateOfBirth").DefaultValue = DirectCast(grid1.FooterRow.FindControl("txtDOB"), TextBox).Text 
     SqlDataSource1.InsertParameters("ZipCode").DefaultValue = DirectCast(grid1.FooterRow.FindControl("txtZIP"), TextBox).Text 

     SqlDataSource1.Insert() 


    End If 
End Sub 

Спасибо за любую помощь в сортировке это!

Джон

+0

Если установить точку останова на 'grid1_RowCommand1' вы ударил его при нажатии на кнопку ссылки? – fnostro

+0

Да, точка останова попадает. –

+0

при условии, что все параметры имеют правильные ожидаемые значения, вы должны быть в порядке. Дважды проверьте входные данные и заверните вставку в try/catch и поместите точку останова в catch. Также - можете ли вы опубликовать соответствующие части разметки sqldatasource – fnostro

ответ

1

DefaultValue не устанавливает значение, что должно быть вставлено, а обеспечивает разрешение для нулевых значений для типов, которые не позволяют им (Integer, Long, и т.д.). См. this link для получения дополнительной информации о том, что делает это свойство.

Что вы хотите сделать, это использовать Control Parameters в вашем SqlDataSource, чтобы привязывать значения ваших текстовых полей к параметрам, используемым в InsertCommand. Используйте следующий пример:

<asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:YourConnection%>" 
     insertcommand="INSERT INTO SomeTable (FirstName, MiddleName) VALUES (@FirstName, @MiddleName)"> 
     <insertparameters> 
      <asp:controlparameter name="FirstName" controlid="txtFirstName" propertyname="Text"/> 
      <asp:controlparameter name="MiddleName" controlid="txtLastName" propertyname="Text"/>   
     </insertparameters> 
</asp:sqldatasource> 

Тогда ваш метод grid1_RowCommand1 становится гораздо чище:

Private Sub grid1_RowCommand1(sender As Object, e As GridViewCommandEventArgs) Handles grid1.RowCommand 

    If e.CommandName = "insert" Then 

     SqlDataSource1.Insert() 

    End If 

End Sub 
+0

, которые вы, возможно, захотите проверить, что нет - я уверен, что источник данных не сможет найти элементы управления, прикрепленные к вашим параметрам вставки, поскольку они находятся внутри gridview и не являются частью набора данных источника gridview. [См. Это] (http://www.asp.net/web-forms/overview/data-access/enhancing-the-gridview/inserting-a-new-record-from-the-gridview-s-footer-vb) – fnostro