我在gridview中使用Item Template字段来更新特定列中的值。 ItemTemplate字段包含“label”控件,EditItemTemplate包含“DropDownList”。现在问题是我需要根据“标签”的值禁用“编辑”按钮...附加编码行。任何人都可以给我一个解决方案。
Home.Aspx:
**********
<Columns>
<asp:BoundField DataField="Date" HeaderText="Date" ReadOnly="true" />
<asp:BoundField DataField="Type" HeaderText="Type" ReadOnly="true" />
<asp:BoundField DataField="Reason" HeaderText="Reason" ReadOnly="true" />
<asp:BoundField DataField="Request By" HeaderText="Request By" ReadOnly="true" />
<asp:TemplateField HeaderText="Status" HeaderStyle-HorizontalAlign="center">
<EditItemTemplate>
<asp:DropDownList ID="ddlState" AutoPostBack="false" runat="server">
<asp:ListItem Text="Approved" Value="Approved"> </asp:ListItem>
<asp:ListItem Text="Declined" Value="Declined"> </asp:ListItem>
<asp:ListItem Text="Pending" Value="Pending"> </asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Bind("Status") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
</Columns>
在我的编码中,“lblName”在ItemTemplate中具有状态值,“ddlState”在EditItemTemplate中具有状态值。根据“lblName”值,必须启用“编辑”选项 ...
答案 0 :(得分:2)
将您的修改CommandField
转换为TemplateField
。
在新生成的Button
中,添加以下标记:
Enabled='<%# IsEditEnabled(Eval("Status")) %>'
在您的代码隐藏中,创建一个新方法:
protected bool IsEditEnabled(string statusValue)
{
// Here is where you determine the value
}
让我知道这对你有用。
答案 1 :(得分:2)
另一种方法是使用RowDataBound,因此您可以直接使用Status的值。这假设您正在为数据源使用DataTable或其他DataRow集合。如果您使用不同的数据类型,则需要更新DataItem强制转换。
<asp:GridView ID="ExampleGridView" runat="server" OnRowDataBound="ExampleGridView_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Status" HeaderStyle-HorizontalAlign="center">
<EditItemTemplate>
<asp:DropDownList ID="StateDropDownList" AutoPostBack="false" runat="server">
<asp:ListItem Text="Approved" Value="Approved" />
<asp:ListItem Text="Declined" Value="Declined" />
<asp:ListItem Text="Pending" Value="Pending" />
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="NameLabel" runat="server" Text='<%# Bind("Status") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="EditButton" runat="server" CommandName="Edit" Text="Edit" Visible="true" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="UpdateButton" runat="server" CommandName="Update" Text="Update" />
<asp:LinkButton ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
从后面的代码中,您可以独立处理该行,并可以访问大部分内容:
protected void ExampleGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow
&& (
e.Row.RowState == DataControlRowState.Alternate
|| e.Row.RowState == DataControlRowState.Normal
|| e.Row.RowState == DataControlRowState.Selected
))
{
Button EditButton = (Button)e.Row.FindControl("EditButton");
System.Data.DataRow dataRecord = (System.Data.DataRow)e.Row.DataItem;
if (EditButton != null && dataRecord != null)
{
if (dataRecord["Status"] == "ValueThatShowsEditButton")
{
EditButton.Visible = true;
}
}
}
}