我有一个包含 4 列的网格视图,即:“用户 ID”、“描述”、“显示密码”、“更改密码”。
我在每个单元格的更改密码列中放置了一个图像按钮,在 Gridview 下方有 3 个文本框。
当我单击更改密码时,该特定行的用户 ID 应显示在文本框 1 中。
如何使用 C# 在 asp.net 中执行此操作,后端是 MySql DB 服务器?
我的偏好是使用该CommandArgument
属性并将点击事件的方法直接分配给后面的aspx代码中的按钮:
<asp:Button ID="btnChangePassword" CommandArgument='<%# Eval('UserID') %>' OnClick="MyEventMethod" />
然后在后面的代码中你会有一个方法来处理它:
public void MyEventMethod(object sender, EventArgs e)
{
Button btn = (Button)sender;
this.TextBox1.Text = btn.CommandArgument;
}
另一种方法是使用 JavaScript(以避免回发)和 onClientClick 属性。在您的网格视图上方的某个地方,您将有一种方法来处理此分配。
<script type="text/javascript">
// Gets the actual reference to the textbox in javascript
// using the client id
function SetTextBoxUserID(userid)
{
var textbox1 = document.getElementById('<%= this.TextBox1.ClientID %>');
textbox1.value = userid;
}
</script>
然后控件将如下所示:
<asp:Button ID="btnChangePassword" OnClientClick='SetTextBoxUserID(<%# "'" + Eval("UserID") + "'" %>)' />
将“更改密码”列更改为超链接字段。在数据部分的该列的属性中,您可以看到 DataNavigateUrlFields 属性。将其设置为“用户 ID”。然后在DataNavigateUrlFormatString属性设置为同一页面如下
~/User.aspx?UserId={0}
然后在页面加载事件中编写如下代码
String userId= Request["UserId"];
if (!string.IsNullOrEmpty(userId))
TextBox1.Text = userId;
这可能不是最好的拍摄。但这可以解决