1

我有一个带有用户的 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 的情况下使行可选。

4

5 回答 5

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();
        }
   }
于 2012-12-10T13:44:38.157 回答
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);
于 2012-12-10T13:49:59.643 回答
0

似乎还可以,但是您的页面在 select 后回发了吗?您是否使用 if(!ispostback) 检查回发控制,因为当页面回发时,gridview 也会,这意味着 grv 将为空。您如何从空 grv 中获取数据,您使用回发控制数据源和数据绑定行的位置...

于 2012-12-10T13:46:44.897 回答
0

放置一个带有选择文本的链接按钮,命令名称为“选择”,并将“用户名”作为命令参数传递。

<asp:LinkButton runat="server" ID="lnkStatus" CommandName="Select" 
                             CommandArgument='<%# Eval("username") %>' Text='Select' />

现在触发 RowCommand 事件:- 从参数中获取用户名,无需从网格中获取。

于 2012-12-10T13:47:52.087 回答
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;  
        }  
    }  
}  
于 2021-02-05T10:10:44.543 回答