Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Gridview单击行启用控件_C#_Asp.net_Gridview_Rowdatabound - Fatal编程技术网

C# Gridview单击行启用控件

C# Gridview单击行启用控件,c#,asp.net,gridview,rowdatabound,C#,Asp.net,Gridview,Rowdatabound,我有一个网格视图。gridview有一个文本框多行,用于保存文本。之后,我有一个名为approved的imagebutton列和一个名为NotApproved的列。我想强制用户在单击“批准”或“未批准”之前阅读多行框中的文本。如何通过编程实现这一点?我知道我应该创建一个Rowdatabound事件,但是我应该如何处理代码呢?我使用的是c#ASP.NET web应用程序。我知道可以使用javascript跟踪浏览器的滚动条,但我个人从未遇到过文本框的类似功能。我建议尝试一种稍微不同的方法,为什么不

我有一个网格视图。gridview有一个文本框多行,用于保存文本。之后,我有一个名为approved的imagebutton列和一个名为NotApproved的列。我想强制用户在单击“批准”或“未批准”之前阅读多行框中的文本。如何通过编程实现这一点?我知道我应该创建一个Rowdatabound事件,但是我应该如何处理代码呢?我使用的是c#ASP.NET web应用程序。

我知道可以使用javascript跟踪浏览器的滚动条,但我个人从未遇到过文本框的类似功能。我建议尝试一种稍微不同的方法,为什么不在网格视图中添加一个额外的列,该列有一个复选框控件-,我已经阅读并接受了该协议。只有选中复选框时,才会启用“批准”按钮,例如:

ASPX:

<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,因为我想要的是:当用户单击特定行时,该行中的两个图像按钮将被启用。否则图像按钮将被禁用。如何强制用户阅读文本?我假设如果用户单击该行,就会对所选文本感兴趣。也许我错了,但这是最接近我想要实现的目标。你能帮我做到这一点吗?