2012-12-10 27 views
1

我有一个GridView与用户,我希望能够选择一行的第一列 - 这是与用户名。我知道如何用autogenerateselectbutton属性来做到这一点,但它在我的设计上看起来不太好。相反,我想让它没有选择按钮。以下是我迄今为止:从GridView asp.net中选择一个单元值c#

<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。

+0

你有没有调试的C#代码,并试图找到如果'字符串user'值为null或不是? –

+0

是的,我做到了,如果我删除'autogenerateselectbutton'然后它是空的,但然后我t不可能选择一行。 – Apostrofix

+0

以下任何答案是否适合您? –

回答

2

你想用你可以创建一个ASP的RowCommand方法: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(); 
     } 
    } 
+0

** FYI **:他使用GridView.SelectedIndexChanged事件 –

+1

如果你想选择一个没有按钮的行,并且只需要点击这里的id就可以解决方案:[Here](http://www.codeproject.com/Articles)/15898 /在网格中选择一个点击行) – GeorgesD

+0

@FettMo但是,我该如何设置这个ButtonField从我的数据库中获取结果,这是用户名。使用BoundField,我可以使用'DataField =“username”',然后如何调用'RowCommand'? – Apostrofix

0

看起来不错,但您的网页postbacking选择后?如果(!ispostback),你检查回发控制 ,因为当页面回发时,gridview也会,这意味着grv将是空的。如何从空grv中获取数据你有使用回发控制你的数据源和数据绑定行...

+0

是的,但我现在没有做其他任何事情。只需将该单元格的值存储到'setSelectedUser'函数中即可。这个想法是,点击一个按钮后,我仍然可以使用选定的用户。 – Apostrofix

0

把选择文本,命令名称作为“选择”并传递“用户名”作为命令参数linkbutton。

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

现在启动RowCommand事件: - 从参数,获取用户名,无需从电网得到它。

1

,如果你想获得一个特定行的选择索引值,其中,如果你想获得一个数值从标签控件,然后”

用户你必须得到的rowIndex值 任何operation.then
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); 
+0

这不是我所需要的。我已经这样做了。 – Apostrofix

+0

“RowIndex”属性将获得用户选择的整个行。您可以准确解释您需要的配对吗? –

+0

选择不起作用 - 例如当我将鼠标移到要选择的单元格上时,单击它时什么都不会发生。否则,获取RowIndex和单元格的代码是正确的。 – Apostrofix

相关问题