Gridview列linkbutton根据数据更改值

时间:2014-10-06 17:29:57

标签: c# asp.net gridview

我正在努力完成一项简单的任务; 如果整数等于零,则gridview column获取整数数据" active"并将linkbutton的commandname设置为active,否则将linkbutton text和command value设置为inactive。

这是我到目前为止所拥有的

<Columns>
   <asp:BoundField HeaderText = "User Name" DataField="UserName" 
                   HeaderStyle-Width="16%" ItemStyle-HorizontalAlign="Center"  />
   <asp:BoundField HeaderText = "Role" DataField="RoleNAME" 
                   HeaderStyle-Width="14%" ItemStyle-HorizontalAlign="Center"  />
   <asp:BoundField HeaderText = "Group" DataField="GroupName" 
                   HeaderStyle-Width="12%" ItemStyle-HorizontalAlign="Center"  />
   <asp:ButtonField ButtonType="link" CommandName = "Active" 
                    HeaderText="Status" Text="Active" 
                    HeaderStyle-Width="10%" ItemStyle-HorizontalAlign="Center"  />
   <asp:ButtonField ButtonType="link" CommandName = "Edit" 
                    HeaderText="" Text="Edit/View" 
                    HeaderStyle-Width="10%" ItemStyle-HorizontalAlign="Center"  />
</Columns> 

代码隐藏

protected void grdMyQueue_RowdataBound(object sender, GridViewRowEventArgs e)
{
    // In template column,
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var obj = (User)e.Row.DataItem;
        if (obj.isDisabled == 0)
        {
            LinkButton linkButton = new LinkButton();
            linkButton.Text = "Active";  
            linkButton.Enabled = true;
            linkButton.CommandName = "Active";
            //linkButton.CommandArgument = e.Row. //this might be causing the problem 
            e.Row.Cells[3].Controls.Clear();
            e.Row.Cells[3].Controls.Add(linkButton);
        }
        else
        {
            LinkButton linkButton = new LinkButton();
            linkButton.Text = "InActive"; 
            linkButton.Enabled = true;
            linkButton.CommandName = "InActive";
            e.Row.Cells[3].Controls.Add(linkButton);

        }

    }
}

但是,当我单击单元格上的活动链接按钮时,我在onrowcommand函数

处出现错误
protected void OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    int index = Convert.ToInt32(e.CommandArgument); // this is the error line 
    GridViewRow gvRow = userManager.Rows[index];
    TableCell usrName = gvRow.Cells[0];
    string userName = usrName.Text;
....

如何根据整数数据设置更改LinkButton文本和CommandName

P.S我试过Eval,但我无法弄清楚发生了什么......

1 个答案:

答案 0 :(得分:0)

我只是按照预期从数据源返回数据。然后我会使用Update Panel来避免Postback发生的Link Button。至于文本修改我会使用Javascript,所以Javascript将读取客户端上的页面。所以当你的数据源返回时:

  • 两个

Javascript可以分析这些行,然后在Grid内修改内部单元格非常轻松。

Javascript的一个例子:

$(".Activator").each(function () {
     if ($(this).prev().find(':checkbox').prop('checked')) {
          $(this).text("Deactivate");
     }
});

此示例将验证是否选中了复选框,是否将内部text修改为班级.Activator

然后Grid中前端代码的内部项看起来像:

<asp:TemplateField HeaderText="Active">
     <ItemTemplate>

          <asp:CheckBox
               ID="CustomerCheck" runat="server"
               Checked='<%# Eval("Active") %>'
               Enabled="false" />

          <asp:LinkButton
               ID="lbCustomerActive" runat="server"
               Text="Activate"
               CommandName="OnActivate"
               ToolTip='<%# "Activate or Deactivate Course: " + Eval("CourseID") %>'
               OnClick="CustomerCheck_Click"
               CssClass="Activator">

         </asp:LinkButton>

     </ItemTemplate>
</asp:TemplateField>

正如您所看到的,随着内部数据的更改,每次Data Source绑定时,Javascript都会自动为我调整值。哪个CustomerCheck_Click将执行服务器上的代码,该代码将读取包含Command Argument的{​​{1}}。哪个Row Id该特定记录没有问题并重新绑定Update。 (部分谎言,我正在解析Grid)。

您将在服务器端实例化,如:

Tooltip