我有一个ASP.NET的DataGrid在它几行。我希望某些行是可编辑的,但不是全部(基于该行中的特定数据项)。的Datagrid条件的行编辑
本来,我是用ButtonColumn
这样做,但我不能把这一或关闭特定行。
这是我现在有:背后
<asp:DataGrid ID="grid1" runat="server" AutoGenerateColumns="false" EnableViewState="true" CssClass="GridviewControlStyle" CellSpacing="0" CellPadding="4" HeaderStyle-CssClass="HeaderStyle"
OnEditCommand="grid1_EditCommand" OnUpdateCommand="grid1_UpdateCommand" OnCancelCommand="grid1_CancelCommand" OnItemDataBound="grid1d_ItemDataBound">
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<strong><%# Resources.Status %></strong>
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.STATUS") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
<strong><%# Resources.Amount %></strong>
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.AMT") %>
</ItemTemplate>
<EditItemTemplate>
<asp:CustomValidator ID="cvAmountGrid" OnServerValidate="cvAmountGrid_ServerValidate" Display="None" runat="server" ControlToValidate="txtAmount" />
<asp:TextBox ID="txtAmount" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.AMT") %>' CssClass="small" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button runat="server" Text="Edit" ID="btnEdit" Visible='<%# IsRowEditable(Eval("STATUS").ToString()) %>' CommandName="Edit" />
<asp:Button runat="server" Text="Update" ID="btnUpdate" Visible="false" CommandName="Update" />
<asp:Button runat="server" Text="Cancel" ID="btnCancel" Visible="false" CommandName="Cancel" />
</ItemTemplate>
</asp:TemplateColumn>
</asp:DataGrid>
代码:
public bool IsRowEditable(string status)
{
return !status.Equals("Locked", StringComparison.OrdinalIgnoreCase);
}
protected void grid1_EditCommand(object source, DataGridCommandEventArgs e)
{
grid1.EditItemIndex = e.Item.ItemIndex;
grid1.DataBind();
TextBox t = e.Item.FindControl("txtAmount") as TextBox;
t.Visible = true; //this can't be found
Button b = e.Item.FindControl("btnEdit") as Button;
b.Visible = false;
Button u = e.Item.FindControl("btnUpdate") as Button;
u.Visible = true;
Button c = e.Item.FindControl("btnCancel") as Button;
c.Visible = true;
}
有我碰到的这种方法的几个问题。首先,调用DataBind
似乎重置了我在任何按钮上设置的可见性状态。如果我没有数据绑定,那么我的可编辑列不会显示为可编辑。所以,我尝试将文本框设置为可手动编辑;但findcontrol返回null,所以我不能。我在这里做错了什么?