我正在努力完成一项简单的任务;
如果整数等于零,则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
,但我无法弄清楚发生了什么......
答案 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