如何用当前用户填充 GridView 列

How to populate a GridView column with current user

我在解决这个问题时遇到了一些问题。希望这里有人可以告诉我我做错了什么。 我试图用当前登录的用户填充 Gridview 中的“用户名”列。我的最终目标是用在同一 Gridview 中编辑“userEntry”列的用户填充数据库中的“userName”列。我想知道谁进行了更改并将该用户记录在数据库的“userName”列中table“userEntry”。

这是我的。 我创建了一个示例数据库 (sampleDB),并在数据库中创建了一个简单的 table、“userEntry”。 请参阅下面的示例数据库脚本。

USE sampleDB;
GO

CREATE TABLE userEntry(
    id INT IDENTITY
    , someText VARCHAR(20)
    , userName VARCHAR(20)
    );
GO

INSERT INTO userEntry(someText, userName)
VALUES('Hello', 'John')
, ('Ohla', 'Sam');
GO

SELECT *
FROM userEntry;
GO

接下来,我创建了一个名为“getUser1”的简单 ASP.NET Web 应用程序(.NET Framework)。然后我添加了一个GridView和一个SQL连接字符串到link到GridView到数据库table。 这是我在 ASP.NET Web 应用程序中使用的代码。

Default.aspx 页数:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="getUser1._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">


   <div>
       <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="id" Width="328px">
           <Columns>                
               <asp:CommandField ShowEditButton="True" />               
               <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True" SortExpression="id" />
               <asp:BoundField DataField="someText" HeaderText="someText" SortExpression="someText" />
               <asp:BoundField DataField="userName" HeaderText="userName" SortExpression="userName" />
           </Columns>
       </asp:GridView>

       <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:conString %>" 
           SelectCommand="SELECT * FROM [userEntry]"
           UpdateCommand="UPDATE [userEntry] Set [someText]=@someText, [userName]=@userName Where [id]=@id"
            DeleteCommand="DELETE FROM [userEntry] Where [id]=@id"></asp:SqlDataSource>
   </div>

</asp:Content>

Default.aspx.cs 页:

using System;
using System.Web.UI;
using System.Security.Principal;
    namespace getUser1
    {
        public partial class _Default : Page
        {
            public object DataField { get; private set; }
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataField.userName.Text = WindowsIdentity.GetCurrent().Name;
                } 
            }
        }
    }

Web.config 页数:

<connectionStrings>
    <add name="conString" connectionString="Data Source=dsouthres18v;Initial Catalog=sampleDB;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

所以,这就是我尝试过的方法(将“if (!IsPostBack)”部分添加到“Default.aspx”页面的代码后面。但它似乎没有用。显然当用户编辑 GridView 并单击 GridView 中的“更新”按钮时,我不知道如何让用户进入“用户名”列。

我可以在创建新条目的简单文本框上使用它,但我无法在 GridView 中对“asp:BoundField DataField”做同样的事情。 我希望这是有道理的,我希望有人能让我走上正确的道路来解决这个问题。 提前致谢。

好的,右击设计视图中的Gridview,调出属性sheet.

这个:

您可以双击该区域以创建活动。

然后,说出这段代码:

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        // string strCurrentUser = WindowsIdentity.GetCurrent().Name;
        string strcurrentUser = "zoo";
        e.NewValues["userName"] = strcurrentUser;

    }