C# Gridview单击行启用控件
我有一个网格视图。gridview有一个文本框多行,用于保存文本。之后,我有一个名为approved的imagebutton列和一个名为NotApproved的列。我想强制用户在单击“批准”或“未批准”之前阅读多行框中的文本。如何通过编程实现这一点?我知道我应该创建一个Rowdatabound事件,但是我应该如何处理代码呢?我使用的是c#ASP.NET web应用程序。我知道可以使用javascript跟踪浏览器的滚动条,但我个人从未遇到过文本框的类似功能。我建议尝试一种稍微不同的方法,为什么不在网格视图中添加一个额外的列,该列有一个复选框控件-,我已经阅读并接受了该协议。只有选中复选框时,才会启用“批准”按钮,例如: ASPX:C# Gridview单击行启用控件,c#,asp.net,gridview,rowdatabound,C#,Asp.net,Gridview,Rowdatabound,我有一个网格视图。gridview有一个文本框多行,用于保存文本。之后,我有一个名为approved的imagebutton列和一个名为NotApproved的列。我想强制用户在单击“批准”或“未批准”之前阅读多行框中的文本。如何通过编程实现这一点?我知道我应该创建一个Rowdatabound事件,但是我应该如何处理代码呢?我使用的是c#ASP.NET web应用程序。我知道可以使用javascript跟踪浏览器的滚动条,但我个人从未遇到过文本框的类似功能。我建议尝试一种稍微不同的方法,为什么不
<div>
<asp:ScriptManager ID="sm" runat="server" />
<asp:UpdatePanel ID="updatePanel" runat="server">
<ContentTemplate>
<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" OnRowDataBound="grid_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox TextMode="MultiLine" runat="server" ID="txtAgreement" Text='<%# Eval("Agreement") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
I have read and accepted the agreement
<asp:CheckBox ID="chkAgreement" AutoPostBack="true" runat="server" OnCheckedChanged="CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnAccept" runat="server" Text="Accept" OnClick="Accept" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var items = new List<License> { new License { Agreement = "Agreement 1" }, new License { Agreement = "Agreement 2" } };
grid.DataSource = items;
grid.DataBind();
}
}
protected void Accept(object sender, EventArgs e)
{
}
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
(e.Row.FindControl("btnAccept") as Button).Enabled = false;
}
protected void CheckedChanged(object sender, EventArgs e)
{
var chkAgreement = sender as CheckBox;
Button btnAccept = null;
if (chkAgreement != null)
{
var row = chkAgreement.Parent.Parent as GridViewRow;
btnAccept = row.FindControl("btnAccept") as Button;
if (btnAccept != null)
if (chkAgreement.Checked)
btnAccept.Enabled = true;
else
btnAccept.Enabled = false;
}
}
}
public class License
{
public string Agreement { get; set; }
}
我已阅读并接受协议
代码隐藏:
<div>
<asp:ScriptManager ID="sm" runat="server" />
<asp:UpdatePanel ID="updatePanel" runat="server">
<ContentTemplate>
<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" OnRowDataBound="grid_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox TextMode="MultiLine" runat="server" ID="txtAgreement" Text='<%# Eval("Agreement") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
I have read and accepted the agreement
<asp:CheckBox ID="chkAgreement" AutoPostBack="true" runat="server" OnCheckedChanged="CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnAccept" runat="server" Text="Accept" OnClick="Accept" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var items = new List<License> { new License { Agreement = "Agreement 1" }, new License { Agreement = "Agreement 2" } };
grid.DataSource = items;
grid.DataBind();
}
}
protected void Accept(object sender, EventArgs e)
{
}
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
(e.Row.FindControl("btnAccept") as Button).Enabled = false;
}
protected void CheckedChanged(object sender, EventArgs e)
{
var chkAgreement = sender as CheckBox;
Button btnAccept = null;
if (chkAgreement != null)
{
var row = chkAgreement.Parent.Parent as GridViewRow;
btnAccept = row.FindControl("btnAccept") as Button;
if (btnAccept != null)
if (chkAgreement.Checked)
btnAccept.Enabled = true;
else
btnAccept.Enabled = false;
}
}
}
public class License
{
public string Agreement { get; set; }
}
public部分类默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
var items=new List{new License{Agreement=“Agreement 1”},new License{Agreement=“Agreement 2”};
grid.DataSource=项;
grid.DataBind();
}
}
受保护的void接受(对象发送方、事件参数)
{
}
受保护的void grid_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
(e.Row.FindControl(“btnacept”)作为按钮)。Enabled=false;
}
受保护的void CheckedChanged(对象发送方,事件参数e)
{
var chkAgreement=发送方为复选框;
按钮BTNACEPT=null;
if(chkAgreement!=null)
{
var row=chkAgreement.Parent.Parent作为GridViewRow;
BTNACEPT=行。FindControl(“BTNACEPT”)作为按钮;
if(btnacept!=null)
如果(CHK协议已选中)
btnacept.Enabled=true;
其他的
btnacept.Enabled=false;
}
}
}
公共类许可证
{
公共字符串协议{get;set;}
}
它不是rowdatabound
event将jscript添加到按钮,该按钮启用对多行框的输入。我相信它是rowdatabound,因为我想要的是:当用户单击特定行时,该行中的两个图像按钮将被启用。否则图像按钮将被禁用。如何强制用户阅读文本?我假设如果用户单击该行,就会对所选文本感兴趣。也许我错了,但这是最接近我想要实现的目标。你能帮我做到这一点吗?