gridview模板字段内的访问控制

时间:2014-07-13 05:08:27

标签: asp.net vb.net

从最近几天开始,我试图在asp.net vb代码文件中访问不同的控件ID,我把它放在gridview模板字段中,如TextBox,Label和Dropdown列表。我想要做的是我有一个sql表" coursereg"用不同的列。我放了一个gridview并在其中添加了一个模板字段,并将#34;生成gridview控件中的自动列设置为false"我在那个临时字段中放了一个HTML表并放了一些控件。该表中的某些控件与该sql表绑定" coursereg"像文本框和标签这样的字段,有些是开放的,用户会自己填写。现在我有一个表单中的提交按钮,它将所有文本添加到另一个名为FA的sql表中。在这里,当我尝试使用cmd.PamandText(例如cmd.Parameters.AddWithValue(" @ name",txtname.text.string))添加这些控件的值/文本时,我遇到了文本框id txtname没有得到填充并显示错误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>

1 个答案:

答案 0 :(得分: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上绑定网格,则可能会获得文本框的空值而不是实际键入的值。这是因为Button__Click事件处理程序在PageLoad和LoadPostData在PageLoad之前运行之后。 LoadPostData是页面生命周期中的事件,当服务器端输入的值(如所有txtname文本框)从客户端键入的内容中复制时。