C# 动态修改gridview元素的类
我有一个gridview:C# 动态修改gridview元素的类,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个gridview: <asp:GridView runat="server" ID="gv_patientMeds" Width="100%" AutoGenerateColumns="False" GridLines="Both" OnRowDataBound="gv_patientMeds_onRowDataBound"> <Columns> <asp:TemplateField HeaderText="Edit" HeaderS
<asp:GridView runat="server" ID="gv_patientMeds" Width="100%" AutoGenerateColumns="False" GridLines="Both" OnRowDataBound="gv_patientMeds_onRowDataBound">
<Columns>
<asp:TemplateField HeaderText="Edit" HeaderStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="lb_editPatient" runat="server" CssClass="<%# Eval(Convert.ToInt32(Eval("recordId")) != 0 ? "btn-active" : "btn-inactive"); %>" Text="Delete" OnClientClick="SubmitDeleteMedicationChange(<%# Eval("updateClinicVisit_recordIdForDelete") %>);" UseSubmitBehavior = "false" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
数据绑定pup
只是一个自定义对象列表
如您所见,我正试图使用某种逻辑来分配delete按钮的类,其中recordId是datatobindpopup列表中一个对象的属性。不过ASP不喜欢这样。我得到“服务器标签格式不正确”
在这种情况下,如何使用逻辑分配按钮的类
提前感谢。用此按钮替换您的
lb_editPatient
按钮
将双引号括在单引号内
<asp:Button ID="lb_editPatient" runat="server"
CssClass='<%# (Convert.ToInt32(Eval("recordId")) != 0 ? "btn-active" : "btn-inactive") %>' Text="Delete"
OnClientClick='SubmitDeleteMedicationChange(<%# Eval("updateClinicVisit_recordIdForDelete") %>)' UseSubmitBehavior = "false" />
尽管Ganesh和fnostro建议的方法可行,但您也可以在代码中设置逻辑:
protected void gv_patientMeds_onRowDataBound(object sender, GridViewRowEventArgs e)
{
//Get data row view
DataRowView drview = e.Row.DataItem as DataRowView;
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Find dropdown control
Button btn= (Button)e.Row.FindControl("lb_editPatient");
btn.CssClass= Convert.ToInt32(drview["recordId"]) != 0 ? "btn-active" : "btn-inactive";
}
}
仍然收到错误“服务器标记格式不正确”。您只从CssClass逻辑中删除了Eval(),对吗?这是因为您使用了嵌入的双引号。确保嵌入的代码被单引号括起来。虽然你可能是对的,但我仍然会遇到同样的错误。@fnostro不要介意我上面的评论。你是对的。我在OnClientClick参数上也遇到了同样的问题。@Byc现在更新了,忘记了为
OnClientClick
添加单引号,您可以像OP尝试做的那样做……一旦引号正确:)但是在RowDataBound事件中处理这个问题要干净得多,并且提供了更多的控制。@fnostro应该很好,顺便说一句,OnClientClick会工作,但CssClassit不会,它会。首先呈现服务器端代码,最终结果将是class=“X”,其中“X”是一个或另一个css类……假设绑定的数据不会在转换时引发异常。你的方式更好though@fnostro嗯:),我不完全确定,我现在检查:)不过我用了你的方法。谢谢
protected void gv_patientMeds_onRowDataBound(object sender, GridViewRowEventArgs e)
{
//Get data row view
DataRowView drview = e.Row.DataItem as DataRowView;
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Find dropdown control
Button btn= (Button)e.Row.FindControl("lb_editPatient");
btn.CssClass= Convert.ToInt32(drview["recordId"]) != 0 ? "btn-active" : "btn-inactive";
}
}