如何用当前用户填充 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;
}
我在解决这个问题时遇到了一些问题。希望这里有人可以告诉我我做错了什么。 我试图用当前登录的用户填充 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;
}