[asp.net]找不到数据 gridview 行的更新 gridview 行

发布时间: 2017/3/26 2:43:47
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我已经看了好几天了,因为某些原因我不能解决我的问题。 我有一个 gridview 控件和想要更新选定的行。 我试图填充 vidInformaiton 类,传给我的存储过程。

                  <asp:GridView ID="gvVideos" CssClass="gvVideosClass" runat="server" 
            AutoGenerateColumns="False" DataKeyNames="CustomerId"
            OnRowDataBound="OnRowDataBound" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit"
            OnRowUpdating="OnRowUpdating" OnRowDeleting="OnRowDeleting" EmptyDataText="No records has been added.">
            <Columns>
                 <asp:TemplateField HeaderText="Customer">
                    <EditItemTemplate>
                        <asp:TextBox ID="customerId" runat="server" Text='<%# Bind("customerId")%>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblcustomerID" runat="server" Text='<%# Bind("customerId")%>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Fid" ItemStyle-Width="50">
                    <ItemTemplate>
                        <%# Container.DataItemIndex + 1 %>
                        <input type="hidden" name="vidId" value='<%# Eval("fId")%>' />
                    </ItemTemplate>

        <ItemStyle Width="50px"></ItemStyle>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Title">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("title") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("title") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Type">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("typeContent")%>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("typeContent")%>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Youtube ID">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("ytid") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("ytid") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Description">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("descvid") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("descvid") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Image">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("thumbnail") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label5" runat="server" Text='<%# Bind("thumbnail") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="SubmitDate">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("submitdate") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label6" runat="server" Text='<%# Bind("submitdate") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
              <asp:TemplateField>
                    <ItemTemplate>
                      <asp:CheckBox ID="chkActive" runat="server" Checked='<%# Eval("active")%>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Categories">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("categories") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label8" runat="server" Text='<%# Bind("categories") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="100px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Sort order">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox9" runat="server" Text='<%# Bind("sortord") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label9" runat="server" Text='<%# Bind("sortord") %>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle Width="50px" />
                </asp:TemplateField>
                <asp:CommandField ButtonType="Link" ShowEditButton="true" ShowDeleteButton="true" ItemStyle-Width="150"/>
            </Columns>
        </asp:GridView>
        <br />


    </div>

我看起来就像这背后的代码。 不知道什么我丢失。我似乎无法获取这些值的行。 我有尝试一切,DirectCast,FindControl。

Protected Sub OnRowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    Dim updVid As New VidInformation
    Dim updVidRecord As New vidController


    Dim row = gvVideos.Rows(e.RowIndex)
    updVid.customerId = row.Cells(1).Text.ToString

    gvVideos.EditIndex = -1
    gvVideos.DataSource = updVidRecord.UpdateVidRecord(updVid)
    bindGridview()

End Sub

解决方法 1:

系列的有用的意见转换的答案

获得新值过帐到编辑 GridView 行的正确方法是使用 NewValues 甚至 args 对象的属性︰

Protected Sub OnRowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    ...
    Dim updVid As New VidInformation
    updVid.customerId = e.NewValues("customerId")
    ...
End Sub

至于为什么最初的方法没有工作。重要的是页面的要意识到是页面的的 GridView 列很有可能是页面的在以前加载期间编辑模式。在开机自检回来的编辑按钮时触发新值发布到服务器,但行已不再处于编辑模式,因此,有没有更多的编辑控件将被发现在这一行。因此上文所述的方法是唯一的由设计方式,以获得新值的行。

赞助商