我有一个带有用户的GridView,我希望能够选择一行的第一列 - 这是用户名。我知道如何使用autogenerateselectbutton
属性,但它在我的设计上看起来不太好。所以相反,我想在没有“选择”按钮的情况下制作它。以下是我到目前为止的情况:
<asp:GridView ID="GridView5" AllowPaging="true" GridLines="None" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle="alt" runat="server" AllowSorting="True"
AutoGenerateColumns="False"
Width="750px"
CausesValidation="False" OnPageIndexChanging="gridView5_PageIndexChanging" OnSelectedIndexChanged="gridView5_SelectedIndexChanged" autogenerateselectbutton="True" >
<Columns>
<asp:BoundField DataField="username" HeaderText="Username" ReadOnly="True" />
<asp:BoundField DataField="name" HeaderText="Name" />
<asp:BoundField DataField="lastname" HeaderText="Last name" />
</Columns>
<selectedrowstyle backcolor="LightCyan"
forecolor="DarkBlue"
font-bold="true"/> </asp:GridView>
如果我删除了autogenerateselectbutton
,那么点击一行就什么都不做。
这是我的c#代码,它从该单元格获取值并将其存储到字符串中,然后以单元格值作为参数调用setUser()
函数。
protected void gridView5_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow row = GridView5.SelectedRow;
string user = row.Cells[1].Text.ToString();
setSelectedUser(user);
}
我认为问题出在aspx
文件中,我创建了GridView
但不知道如何在不将autogenerateselectbutton
设置为true的情况下使行可选。< / p>
答案 0 :(得分:2)
你想使用RowCommand方法你可以创建一个asp:ButtonField列并设置命令名
protected void GridView1_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
if (e.CommandName=="MyCommand")
{
int row = int.Parse(e.CommandArgument.ToString());
var cellText= gvOwner.Rows[row].Cells[1].Text.Trim();
}
}
答案 1 :(得分:1)
如果要获取用户执行任何操作的特定行的选定索引值,则必须获取rowindex值 如果您想从标签控件中获取值,那么“
Label l=(Label)Gridviewname.rows[e.rowindex].Findcontrol("label name of which you want to get the data")
String s=l.Text;
setselecteduser(l);
如果您想从TextFiled获取值
TextField t=(TextField)GridviewName.rows[e.rowindex].FindControl("Textbox Id of which you want to get the data")
String s=t.Text;
SetSelecteduser(t);
答案 2 :(得分:0)
看起来没问题,但选择后你的页面回复了吗?你用它检查回发控制吗? if(!ispostback)因为当页面回发时gridview也会,这意味着grv将为空。如何从空grv获取数据,你使用回发控制数据源和数据绑定行...
答案 3 :(得分:0)
添加一个带有选择文本的链接按钮,命令名称为&#34;选择&#34;并通过&#34;用户名&#34;作为命令参数。
<asp:LinkButton runat="server" ID="lnkStatus" CommandName="Select"
CommandArgument='<%# Eval("username") %>' Text='Select' />
现在解雇RowCommand事件: - 从参数获取用户名,无需从网格中获取。
答案 4 :(得分:0)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridviewDemo.aspx.cs" Inherits="DemoWebApp.GridviewDemo" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvEmployee" runat="server" EmptyDataText="No Records Found" AutoGenerateColumns="false" >
<Columns>
<asp:BoundField HeaderText="SNo" DataField="EmpID" />
<asp:BoundField HeaderText="Employee Name" DataField="EmpName" />
<asp:BoundField HeaderText="Age" DataField="EmpAge" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
protected void gvEmployee_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int age = Convert.ToInt32(e.Row.Cells[2].Text.ToString());
if (age >= 25 && age < 30)
{
e.Row.BackColor = Color.GreenYellow;
}
if (age == 30)
{
e.Row.BackColor = Color.LightBlue;
}
}
}