【问题标题】:Access Control inside gridview template fieldgridview 模板字段内的访问控制
【发布时间】:2014-07-13 05:08:26
【问题描述】:

从最近几天开始,我试图访问 asp.net vb 代码文件中的不同控件 ID,我将其放在 gridview 模板字段中,如 TextBox、Label 和 Dropdown 列表。我想要做的是我有一个带有不同列的 sql 表“coursereg”。我放了一个gridview并在其中添加了一个模板字段并将“在gridview控件中生成自动列设置为false”我在该临时字段中放置了一个HTML表格并放置了一些控件。该表中的某些控件与该 sql 表“coursereg”字段(如文本框和标签)绑定,有些控件是打开的,用户将自行填写。现在我在该表单中有一个提交按钮,它将所有文本添加到另一个名为 FA 的 sql 表中。在这里,当我尝试使用 cmd.CommandText 添加这些控件的值/文本时,我被抓住了错误 txtbox 未声明它可能由于其保护级别而无法访问,并且同样在我放入 gridview 的所有控件上显示相同的错误。请在这方面帮助我 plzzz 我正在学习 asp.net (V.b) 我自己并且没有太多的编程技能来解决它​​。

 Protected Sub Button1_Click(sender As Object, e As EventArgs)
    cmd.CommandText = "INSERT INTO FA (regno,photo,name,parentage,address,Phone,foccupation,income,category,class,rollno,course,subjects,actnumber,actname,acttype,bankname,branchname) " & _
               "values(@regno,@photo,@name,@parentage,@address,@Phone,@foccupation,@income,@category,@class,@rollno,@course,@subjects,@actnumber,@actname,@acttype,@bankname,@branchname)"
    cmd.Parameters.AddWithValue("@name", txtname.text.string)

    ' i (tried this but does not work)   Dim text As TextBox = TryCast(grd.Controls(0).Controls(0).FindControl("textname"), Text)
End Sub

<asp:TextBox ID="TextBox1" runat="server" Enabled="False" ReadOnly="True" Text='<%# String.Format("{0} {1} {2}", Eval("sfname"), Eval("smname"), Eval("slname")) %>' Height="22px" Width="308px" Font-Size="12pt"></asp:TextBox>

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    考虑一下。您有一个网格,并且在行模板中添加了一些文本框(txtname)。这意味着您不会创建单个文本框,而是创建与网格中的行一样多的文本框。这就是为什么您不能简单地从 Button1_Click 访问该 txtname。

    目前尚不清楚您是否要为所有行多次调用该 INSERT 语句,但如果是,那么您可以使用类似的东西(对不起 C# 代码,但您可能会找到如何转换它到 VB.NET):

    foreach (GridViewRow row in grd.Rows)
    {
        var txt = row.FindControl("textname") as TextBox;
        if (txt != null)
        {
           // INSERT STATEMENT with txt.Text
        }
    }
    

    重要提示:此任务的主要关注点是您如何实际绑定网格。您必须考虑页面生命周期。如果您在 Page_Load 上绑定您的网格,那么您可能会得到文本框的空值,而不是您实际输入的值。这是因为 Button1_Click 事件处理程序位于 Page_Load 之后,而 LoadPostData 位于 PageLoad 之前。 LoadPostData 是页面生命周期中的事件,当服务器端输入的值(如所有 txtname 文本框)从您在客户端键入的内容中复制时。

    【讨论】:

    • 感谢您的回复,我想清除几件事 页面加载时网格未绑定 页面加载时将有一个文本框和一个按钮,以及文本框中的用户说明用户将输入他的注册号,然后在按钮单击事件上执行选择命令,并且在 gridview 内部的表格将显示之后,以及绑定的相关文本框的值。在底部会有另一个按钮“提交”,它将一次性为所有控件执行插入语句
    • 如果你只有一个文本框,那么把它放在网格中就没有意义了。把它移开,让生活更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多