Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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
Asp.net 创建表单控件的可变表行_Asp.net_Vb.net_Gridview_Dataset - Fatal编程技术网

Asp.net 创建表单控件的可变表行

Asp.net 创建表单控件的可变表行,asp.net,vb.net,gridview,dataset,Asp.net,Vb.net,Gridview,Dataset,我主要来自PHP和Javascript背景,我习惯于创建直接处理编写HTML的低级函数,或者创建React之类的声明性库,它允许您根据数据声明HTML的结构,然后用数据填充 现在我正在使用ASP.NET,我正在尝试以.NET的方式做更多的事情,而不是仅仅遵循我在其他框架中使用的相同模式 目标: 默认情况下,创建一个包含10行的表。这些行中的每一行都包含用户将在其中输入学生数据的文本框。如果他们认为合适,可以添加更多行。此数据不绑定到数据库或其他任何东西,它只用于填充电子邮件 我的第一次尝试: 最

我主要来自PHP和Javascript背景,我习惯于创建直接处理编写HTML的低级函数,或者创建React之类的声明性库,它允许您根据数据声明HTML的结构,然后用数据填充

现在我正在使用ASP.NET,我正在尝试以.NET的方式做更多的事情,而不是仅仅遵循我在其他框架中使用的相同模式

目标: 默认情况下,创建一个包含10行的表。这些行中的每一行都包含用户将在其中输入学生数据的文本框。如果他们认为合适,可以添加更多行。此数据不绑定到数据库或其他任何东西,它只用于填充电子邮件

我的第一次尝试: 最初,我尝试创建一个数据集,其中定义的模式与输入内容相匹配

studentData = New DataSet()
studentData.Tables.Add()

studentData.Tables(0).Columns.Add("StudentID")
studentData.Tables(0).Columns.Add("StudentName")
studentData.Tables(0).Columns.Add("StudentGrade")
studentData.Tables(0).Columns.Add("ContactPhone")
在Init上,我将向表单添加10行,并将数据绑定到GridView

For index As Integer = 1 To ViewState("StudentCount")
    tblStudents.Rows.Add(GetTableRow(index))
Next

grdStudents.DataSource = studentData
grdStudents.DataBind()
GridView的声明如下:

<asp:GridView ID="grdStudents" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="Student Id#">
                <ItemTemplate>
                    <asp:TextBox runat="server" ID="studentId" Value='<%# Eval("StudentId") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Last/First Name">
                <ItemTemplate>
                    <asp:TextBox runat="server" ID="studentName" Value='<%# Eval("StudentName") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Grade">
                <ItemTemplate>
                    <asp:TextBox runat="server" ID="studentGrade" Value='<%# Eval("StudentGrade") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Phone #">
                <ItemTemplate>
                    <asp:TextBox runat="server" ID="phone" Value='<%# Eval("ContactPhone") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
我只是手动创建控件

' GetCellForControl is a little helper function which just puts a control in a cell and gives you the cell
Protected Function CreateTableRow(ByVal index As Integer)
            Dim row As TableRow = New TableRow

            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "StudentId_" & index,  .MaxLength = 10}))
            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "StudentName_" & index }))
            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "StudentGrade_" & index, .MaxLength = 3}))
            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "Phone_" & index, .TextMode = TextBoxMode.Phone}))

            Return row
        End Function

'In Page_Load
 For index As Integer = 1 To ViewState("StudentCount")
            tblStudents.Rows.Add(CreateTableRow(index))
        Next
所以这个很好用。要检索数据,我可以循环遍历每个TableRow并将控件从其各自的TableCell中拉出,也可以使用每个控件的可预测ID来拉出数据

问题 好吧,这种方法是正确的,所以没有真正的问题,但我觉得我错过了一些东西。我对ASP和.NET编程基本上是新手,所以有很多功能我知道我还不知道。因此,我希望能够深入了解能够以更惯用的方式解决此问题的功能

到目前为止,我已经使用将GridView绑定到DataSet的声明式样式创建了其他表单,但大多数表单都涉及到DataSet的备份数据库。在这种情况下,它只是一系列相同的行输入,可以发生10到n次。看起来很简单,对吧?我目前的解决方案很简单。但对我来说,这只是硬编码10行和输入的下一步,肯定有更好的东西

我觉得我的第一次尝试是接近我想要的,但我只是不知道到底需要什么才能让一切顺利

在ASP.NET中是否有一种使用声明性方法来实现目标的方法

TL;DR:我在ASP.NET方面很差劲,我正试图通过理解以.NET方式解决问题的惯用方法,而不是从我习惯的其他框架或幼稚的命令式方式来逐渐减少差劲。

。他最终使用了一个数据库,但是您可以使用他的一些代码将网格数据保存到一个datatable中,然后根据需要使用它

顺便说一句,数据集包含用于在数据库中检索、更新和删除数据的内置方法,因此,如果不使用数据库,则不需要数据集;一个数据表就足够了。Hth.

tl;dr从一开始就开始了,否则我们必须阅读所有内容才能找到它[实际上,你太长了,读不下去了,这更像是一个P.S.所以它在哪里都很好。]
' GetCellForControl is a little helper function which just puts a control in a cell and gives you the cell
Protected Function CreateTableRow(ByVal index As Integer)
            Dim row As TableRow = New TableRow

            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "StudentId_" & index,  .MaxLength = 10}))
            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "StudentName_" & index }))
            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "StudentGrade_" & index, .MaxLength = 3}))
            row.Cells.Add(GetCellForControl(New TextBox With {.ID = "Phone_" & index, .TextMode = TextBoxMode.Phone}))

            Return row
        End Function

'In Page_Load
 For index As Integer = 1 To ViewState("StudentCount")
            tblStudents.Rows.Add(CreateTableRow(index))
        Next