2010-07-15 75 views
2

我想建立一个表格,用户可以在几个文本框中输入一些数据,然后点击“添加”按钮,并将数据显示在网格中或类似的东西上。他们需要能够输入多行。asp.net数据输入表格

然后当他们完成后,他们可以点击“保存”按钮将数据保存到数据库。

如何从文本框中将数据导入“网格”?

编辑

下面是我从您的评论至今

protected void Page_Load(object sender, EventArgs e) 

{ 

    DataTable myDataTable = new DataTable(); 

    DataColumn dc1 = new DataColumn("Employee"); 
    myDataTable.Columns.Add(dc1); 
    DataColumn dc2 = new DataColumn("Category"); 
    myDataTable.Columns.Add(dc2); 
    DataColumn dc3 = new DataColumn("Description"); 
    myDataTable.Columns.Add(dc3); 
    DataColumn dc4 = new DataColumn("P/S/N"); 
    myDataTable.Columns.Add(dc4); 
    DataColumn dc5 = new DataColumn("Hours"); 
    myDataTable.Columns.Add(dc5); 
    DataColumn dc6 = new DataColumn("WeekEnding"); 
    myDataTable.Columns.Add(dc6); 

} 
protected void btnAddToGrid_Click(object sender, EventArgs e) 

{ 
    DataRow row = myDataTable.NewRow();// i'm getting error here sayind myDataTable does not exist 

    row["Employee"] = LoginName1.ToString(); 
    row["Category"] = ddlCategory.SelectedValue; 
    row["Description"] = txtDescription.Text; 
    row["P/S/N"] = ddlPSN.SelectedValue; 
    row["Hours"] = ddlHours.SelectedValue; 
    row["WeekEnding"] = txtWeekEnding.Text; 

    myDataTable.Rows.Add(row); 
+0

正在做作业吗?即使不是,你到目前为止尝试过什么? – Kiril 2010-07-15 20:35:31

+0

不,我想在我目前使用excel电子表格的工作中替换时间表系统,我希望人们能够在描述中输入他们的小时类别,并且能够在保存前一周查看他们所有的小时数。我发现了一些有关创建数据表和数据行的信息,然后将它们绑定到了网格上,我正在努力解决这个问题 – 2010-07-15 20:37:38

回答

2

好了你的第一个问题:

i'm getting error here sayind myDataTable does not exist 

是因为你在Page_Load定义你的表,然后它去在功能结束时超出范围。这听起来像你不了解ASP.NET的基本概念以及你正在尝试做什么。

这是一个快速而肮脏的未经测试的解决方案,但我必须强调,您应该试着理解为什么此解决方案在尝试扩展它或在ASP.NET中执行更多操作。我希望我的10分钟时间能够帮助您理解C#和ASP.NET。

[Serializable] 
public class YourData 
{ 
    public string Employee { get; set; } 
    public string Category { get; set; } 
    public string Description { get; set; } 
    public string P_S_N { get; set; } 
    public string Hours { get; set; } 
    public string WeekEnding { get; set; } 
} 

// Used to add your list of data to the viewstate cache 
// (There are other ways to store data between posts but I am trying to keep it simple) 
public void SetYourCachedData(List<YourData> data) 
{ 
    ViewState["YourDataCache"] = data; 
} 

// Used to get your save data so far 
public List<YourData> GetYourCachedData() 
{ 
    return ViewState["YourDataCache"] == null ? 
     new List<YourData>() : (List<YourData>)(ViewState["YourDataCache"]); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Do nothing 
} 

protected void btnAddToGrid_Click(object sender, EventArgs e) 
{ 
    // Get the data and store it in the ViewState to cache it between post backs 
    // Assuming one record added with each click. 
    List<YourData> data = GetYourCachedData(); 
    data.Add(new YourData() 
    { 
     Employee = LoginName1.ToString(), 
     Category = ddlCategory.SelectedValue, 
     Description = txtDescription.Text, 
     P_S_N = ddlPSN.SelectedValue, 
     Hours = ddlHours.SelectedValue, 
     WeekEnding = txtWeekEnding.Text 
    });    

    // You can bind to any type of collection easily. 
    // You don't need to use a DataTable with a GridView 
    yourGrid.DataSource = data; 
    yourGrid.DataBind(); 

    SetYourCachedData(data); 
} 

protected void btnSaveData_Click(object sender, EventArgs e) 
{ 
    // Pull data from the ViewState cache 
    List<YourData> data = GetYourCachedData(); 

    // Now iterate through data to save it to your database... 
    // look this up if you don't know how as this is a lot more work. 
} 
+0

感谢您的帮助 – 2010-07-16 16:27:37

+0

我正在研究您的解决方案,并且想要了解它。有没有与列表或ViewState之前,所以我会研究这些主题了解更多。 – 2010-07-16 16:40:35

1

看起来像你只需要设置输出对象的数据源并绑定它。

即:

myGrid.datasource = myDataTable 
myGrid.databind() 

而作为凯尔西说 - 让您的数据表的范围。

如果你只是想尝试一下,你的page_load之上的公共暗淡会更容易。否则,单独的班级方法是一个好方法。

+0

感谢您的帮助 – 2010-07-16 16:28:10