detailsview 如何实现编辑、更新、取消(手写代码),请高手讲一下主要思路吧

解决方案 »

  1.   

    <%@ Page Language="C#" AutoEventWireup="true" %><!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 id="Head1" runat="server">
        <title>DetailsView</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
                    SelectCommand="SELECT * FROM [cloud]" ConflictDetection="CompareAllValues" DeleteCommand="DELETE FROM [cloud] WHERE [id] = @original_id AND [name] = @original_name AND [num] = @original_num"
                    InsertCommand="INSERT INTO [cloud] ([name], [num]) VALUES (@name, @num)" OldValuesParameterFormatString="original_{0}"
                    UpdateCommand="UPDATE [cloud] SET [name] = @name, [num] = @num WHERE [id] = @original_id AND [name] = @original_name AND [num] = @original_num">
                    <DeleteParameters>
                        <asp:Parameter Name="original_id" Type="Int32" />
                        <asp:Parameter Name="original_name" Type="String" />
                        <asp:Parameter Name="original_num" Type="Int32" />
                    </DeleteParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="name" Type="String" />
                        <asp:Parameter Name="num" Type="Int32" />
                        <asp:Parameter Name="original_id" Type="Int32" />
                        <asp:Parameter Name="original_name" Type="String" />
                        <asp:Parameter Name="original_num" Type="Int32" />
                    </UpdateParameters>
                    <InsertParameters>
                        <asp:Parameter Name="name" Type="String" />
                        <asp:Parameter Name="num" Type="Int32" />
                    </InsertParameters>
                </asp:SqlDataSource>
                <asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" Height="50px"
                    Width="125px" AutoGenerateRows="False" AllowPaging="True" AutoGenerateEditButton="True"
                    AutoGenerateDeleteButton="True" AutoGenerateInsertButton="True">
                    <Fields>
                        <asp:BoundField ReadOnly="True" HeaderText="ID" DataField="id" InsertVisible="false" />
                        <asp:BoundField HeaderText="Name" DataField="name" />
                        <asp:BoundField HeaderText="Num" DataField="num" />
                    </Fields>
                </asp:DetailsView>
            </div>
        </form>
    </body>
    </html>
    参考一下
      

  2.   

    好多中方法啊
    利用CellBeginEdit和CellEndEdit
    标记改动的行
    定义一个全局arrayList
    将行号添加进去
    再进行处理
      

  3.   

     protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
        {
            DetailsView1.ChangeMode(e.NewMode);
        }为什么我添加了这个事件之后点击"编辑"要点击两下才有效呢?点击"取消"操作也是这样?
      

  4.   

    CellBeginEdit是DataGridView的DataGridView.CellBeginEdit 事件 吧,detailsView都没这个事件
      

  5.   

    1楼的方法是最普遍的,但是不利于项目的后期维护
    也是论坛上出现最多的方法
    这个控件如果在后台用DataSource进行绑定,会出现许多如:更新时取不到最新的值得问题,这个问题正在解决中,希望知道的高手留言,一起讨论
      

  6.   

    看你用的什么控件呀
    如果你用的vs的话  那就简单了
    配置下数据,再把属性调整下设置为可编辑,可删除,可增加后
    再配置到你的dataCommand事件中(或editCommand,updatecommand,deletecommand事件)
    然后写方法就OK了
    如果数据过多
    我建议数据的封装手动来做
      

  7.   

    DetailsView1.ChangeMode(DetailsViewMode.Edit);