在我的asp.net程序中用gridview组建绑定数据库来显示数据库中相应的内容。我选择了gridview组件的编辑功能,可以对每行数据进行编辑。
    现在我想问的得到的功能是,当我们点击编辑,更新数据时,它会将进行更新的使用者也会相应的更改。
补充,这是一个系统网站,需要用户名才能登陆,用户名我放在了cookies中。能实现在点击更新后添加代码事件吗,该怎么做,谁能指导一下,谢谢。

解决方案 »

  1.   

    这个我个人建议你使用session存储用户登录信息,你把登录的用户存储在session里面。当你点击编辑的时候会触发一个事件,在那个事件中,你获取session里面的UserName值,并同步更新数据库中的操作者。
    当然了。。Cookies也是可以的。。但是我个人觉得session比较便捷和安全。
      

  2.   

    补充一下:我的gridview中只显示3个字段的信息,没有将id输出出来,有什么方法在点击一行的编辑时获取这行的Id,最好有具体的获取Id的代码。
      

  3.   

    方法是有多种的:
    将更新和编辑按钮所在的列转换为模板列,这时会在模板列中生成一个linkbutton控件,设置linkbutton的CommandArgument='<% #Eval("id")%>',这样就可以在后台的Editting事件中获取id了,后台获取string id = e.CommandArgument;
      

  4.   

    有没有在gridview的RowUpdated事件中获取id号,同时对这个id进行更新的例子啊,麻烦了,最好是代码。
      

  5.   

    rowUpdated事件中,没有获取id的语句,只能说你的gridview 在显示的时候可以有一个隐藏的列,把这个列的值赋值为id , string id = ((TextBox)GridView1.Rows[e.RowIndex].Cells[0].FindControl("id")).Text; 这样获取id,然后再进行编辑。
      

  6.   

    参考下面的例子:<!-- 假设表的主键是ID,还有4个字段Field1,Field2,Field3 和 ModifiedUser(表示修改数据的用户) --><asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="ID" 
        AutoGenerateColumns="False" OnRowUpdating="GridView1_RowUpdating">
        <Columns>
            <asp:BoundField DataField="Field1" HeaderText="字段1" />
            <asp:BoundField DataField="Field2" HeaderText="字段2" />
            <asp:BoundField DataField="Field3" HeaderText="字段3" />
            <asp:CommandField ShowEditButton="True" />
        </Columns>
    </asp:GridView><asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="xxxxxxxxx" 
        SelectCommand="SELECT * FROM [表名]" 
        UpdateCommand="UPDATE [表名] SET [Field1]=@Field1, [Field2]=@Field2, [Field3]=@Field3, [ModifiedUser]=@CurrentUser WHERE [ID]=@ID">
        <UpdateParameters>
            <asp:Parameter Name="Field1" Type="String" />
            <asp:Parameter Name="Field2" Type="String" />
            <asp:Parameter Name="Field3" Type="String" />
            <asp:Parameter Name="CurrentUser" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource><script runat="server">protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        e.NewValues["CurrentUser"] = Request.Cookies["LoginUserName"]; // 假设当前登录的用户存放在名为LoginUserName的cookie中
    }</script>
      

  7.   

    这样做以后会提示
    错误 2 “System.Web.UI.WebControls.GridViewUpdatedEventArgs”并不包含“RowIndex”的定义这个错误,好像在updated中不包含rowindex这个。有什么解决方法吗?
      

  8.   

        可以将id显示到第一列 、让后将这列隐藏    protected void Gridview1_RowCreated(object sender, GridViewRowEventArgs e)
        {
              if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[0].Visible = false;  
            }
    }   int  _id= int.Parse(Gridview1.SelectedRow.Cells[0].Text.ToString());      //获取选择行的id
      

  9.   


    <asp:GridView ID="gvGoods" runat="server" Width="100%" AutoGenerateColumns="False"
                                                                                CssClass="gridview" DataKeyNames="id"></>
    protected void gvGoods_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int ID = Int32.Parse(gvGoods.DataKeys[e.RowIndex].Value.ToString());
        }
      

  10.   

    row_updating 事件 中 添加 sql 执行 代码从 session 中取出 用户 id update table set column = '' where column = ''  and userid = id
      

  11.   

    在GridView列编辑中添加一模板列,在编辑模板放一textbox,将其绑定到数据源的某列,再将其隐藏,然后在你选择某行时,可以取出Textbox的text属性。方法为:
    TextBox textbox = (TextBox)GridView1.Rows[e.RowIndex].Cells[0].FindControl("id");
    id = textbox.Text;