none
GridView自带的更新功能无法实现 RRS feed

  • 问题

  • 数据表名News_Kind
    有三列:kind_id   自动增长
        kind_name  varchar
        kind_order  int

    页面很简单,只有前台,没有任何后台程序

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:jyjszxSQL %>" DeleteCommand="DELETE FROM [News_Kind] WHERE [kind_id] = @kind_id" InsertCommand="INSERT INTO [News_Kind] ([kind_name], [kind_order]) VALUES (@kind_name, @kind_order)" SelectCommand="SELECT [kind_name], [kind_id], [kind_order] FROM [News_Kind] ORDER BY [kind_order], [kind_id]" UpdateCommand="UPDATE [News_Kind] SET [kind_name] = @kind_name, [kind_order] = @kind_order WHERE [kind_id] = @kind_id"> <DeleteParameters> <asp:Parameter Name="kind_id" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="kind_id" Type="Int32" /> <asp:Parameter Name="kind_name" Type="String" /> <asp:Parameter Name="kind_order" Type="Int32" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="kind_name" Type="String" /> <asp:Parameter Name="kind_order" Type="Int32" /> </InsertParameters> </asp:SqlDataSource> <asp:GridView ID="GridView1"

    runat="server" AutoGenerateColumns="False" DataKeyNames="kind_id" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="kind_id" HeaderText="kind_id" InsertVisible="False" ReadOnly="True" SortExpression="kind_id" /> <asp:BoundField DataField="kind_name" HeaderText="kind_name" SortExpression="kind_name" /> <asp:BoundField DataField="kind_order" HeaderText="kind_order" SortExpression="kind_order" /> <asp:CommandField ShowEditButton="True" ShowInsertButton="True" ShowDeleteButton="True" /> </Columns> </asp:GridView>


    共有两个控件,一个是sqlDataSource,一个是GridView

    数据能够显示,删除也正常,就是修改数据无法实现,也不报错

    点击修改以后,单元格变成可文本框,修改,并提交后,还是原来的数据。

    我把
    UpdateCommand="UPDATE [News_Kind] SET [kind_name] = @kind_name, [kind_order] = @kind_order WHERE [kind_id] = @kind_id"
    改成
    UpdateCommand="UPDATE [News_Kind] SET [kind_name] = '怪事', [kind_order] = 20 WHERE [kind_id] = @kind_id"

    可以实现修改,而且修改的就是那一条,所以kind_id参数传递没有问题,只是kind_name和kind_order参数无法传递过去

    求指导
    2012年3月23日 1:59

答案

  • 或許你可以開一個新的Project再試試看。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    根据您的建议,果然是可以,偶更加奇怪了,呵呵
    • 已标记为答案 硬撅撅 2012年3月23日 6:27
    2012年3月23日 4:52

全部回复

  • 这个问题比较郁闷,看代码似乎是可以的:

    1)请确认没有禁用ViewState。

    2)如果仍然不行,请把CommandField转换成Template(模板)类型,然后人为在GridView_RowUpdating中:

    e.NewValues["kind_name"] = (GridView1.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text;
    e.NewValues["kind_order"] = (GridView1.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text;



       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月23日 2:41
  • 或許你可以開一個新的Project再試試看。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月23日 3:45
  • 这个问题比较郁闷,看代码似乎是可以的:

    1)请确认没有禁用ViewState。

    2)如果仍然不行,请把CommandField转换成Template(模板)类型,然后人为在GridView_RowUpdating中:

    e.NewValues["kind_name"] = (GridView1.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text;
    e.NewValues["kind_order"] = (GridView1.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text;



       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    偶是个新手,在MSDN里查不到跟gridview有关的viewstate,倒是有DataGridColumn有关的viewstate,但我并没有做过viewstate的限制啊

    假如viewstate做了限制,也不应该有某参数可行,别的参数不可行

    另外,我按照另一位朋友的意见,新建了一个页面,原样的代码复制过去,果然可以,这是为什么呢

    原来的页面是使用了模板的,我查看了母版页和内容页的page,没有发现什么异样

    <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="manage_MasterPage" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>教育技术中心后台</title>
        <link rel="stylesheet" type="text/css" href="include/css.css" />
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="text-align:center">     
            <table border="0" cellpadding="0" cellspacing="0" style="height: 100%" align="center">
                <tr>
                    <td style="height:30px;width: 100%;background-color:#eee ;border: solid 1px black">
                        <div style="text-align: center;">
                            <table border="0" cellpadding="0" cellspacing="0" style="background-color:#eee">
                                <tr>
                                    <td style="width: 780px;text-align:left "> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/manage/news/news_add.aspx">文件上传</asp:HyperLink></td>
                                    <td style="width: 200px;text-align:right;"><asp:LoginName ID="LoginName1" runat="server" FormatString="欢迎您,{0} " /> <asp:LinkButton ID="SignOut" runat="server" Text="退出"/></td>
                                </tr>
                            </table>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="vertical-align:top;height:500px;border-border-right: solid 1px black;"><div style="margin:10px;"><asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
            </asp:contentplaceholder></div>
                    </td>
                </tr>
                <tr>
                    <td style="height:30px;background-color:#eee;border:solid 1px black">- ******学院教育技术中心 -</td>
                </tr>
            </table>
        </div>
        <iframe src="/manage/refresh.htm" height="1" width="1"></iframe>
        </form>
    </body>
    </html>

    <%@ Page Language="VB" MasterPageFile="~/manage/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="manage_kind_Default" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <strong>
        新闻类别管理<br />        
        </strong>&nbsp;<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:jyjszxSQL %>"
            DeleteCommand="DELETE FROM [News_Kind] WHERE [kind_id] = @kind_id" InsertCommand="INSERT INTO [News_Kind] ([kind_name], [kind_order]) VALUES (@kind_name, @kind_order)"
            SelectCommand="SELECT [kind_name], [kind_id], [kind_order] FROM [News_Kind] ORDER BY [kind_order], [kind_id]"
            UpdateCommand="UPDATE [News_Kind] SET [kind_name] = @kind_name, [kind_order] = @kind_order WHERE [kind_id] = @kind_id">
            <DeleteParameters>
                <asp:Parameter Name="kind_id" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="kind_id" Type="Int32" />
                <asp:Parameter Name="kind_name" Type="String" />
                <asp:Parameter Name="kind_order" Type="Int32" />            
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="kind_name" Type="String" />
                <asp:Parameter Name="kind_order" Type="Int32" />
            </InsertParameters>
        </asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="kind_id"
            DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="kind_id" HeaderText="kind_id" InsertVisible="False" ReadOnly="True"
                    SortExpression="kind_id" />
                <asp:BoundField DataField="kind_name" HeaderText="kind_name" SortExpression="kind_name" />            
                <asp:BoundField DataField="kind_order" HeaderText="kind_order" SortExpression="kind_order" />
                <asp:CommandField ShowEditButton="True" ShowInsertButton="True" ShowDeleteButton="True" />
            </Columns>
        </asp:GridView>
    </asp:Content>

    会是哪里出了问题?
    2012年3月23日 4:50
  • 或許你可以開一個新的Project再試試看。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    根据您的建议,果然是可以,偶更加奇怪了,呵呵
    • 已标记为答案 硬撅撅 2012年3月23日 6:27
    2012年3月23日 4:52
  • 既然新建页面可以,偶把原先的文件删掉,新建了内容页,把代码原封不动复制过去,竟然可以,真的可以,这是为什么呢?难道偶的代码页里有东西?不应该啊,郁闷了。

    感谢两位专家的答复。

    2012年3月23日 4:56
  • 不用谢,其实我们也是在猜测……你原来的文件中cs代码写过什么,或者回忆一下你曾经做过什么吗?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月23日 5:00
  • 既然新建页面可以,偶把原先的文件删掉,新建了内容页,把代码原封不动复制过去,竟然可以,真的可以,这是为什么呢?难道偶的代码页里有东西?不应该啊,郁闷了。

    感谢两位专家的答复。

    或許其他專家有更好的方法,通常遇到這種詭異的問題,我都是用最笨的方法try and error,逐步地找出造成問題的原因。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月23日 5:00
  • 不用谢,其实我们也是在猜测……你原来的文件中cs代码写过什么,或者回忆一下你曾经做过什么吗?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    代码页里应该是没有东西的,因为偶一直尝试不使用代码来实现(MSDN里说可以这么做),当然也不排除偶尔因为双击了控件而打开代码页

    前台页面倒是反复修改过多次,因为MSDN里语焉不详或者是我没找到正确的向导,所以网上搜索了一些文章反复测试。

    不过问题解决了,总归是好事。

    2012年3月23日 6:32
  • 嗯,请把Terry的标记为答案,我的不要标记了。毕竟他帮助了你。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月23日 6:47
  • 嗯,请把Terry的标记为答案,我的不要标记了。毕竟他帮助了你。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    Wei_Dong您客氣了,我好像沒幫上什麼忙,因為似乎沒找到真正的問題點。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月23日 6:58