在ASP.NET 2.0中,可以使用GridView控件方便地展示和编辑数据,本文将讲解如何通过GridView批量添加数据,并包含两个示例说明。
1. 准备工作
在使用GridView批量添加数据之前,需做如下准备工作:
- 确定数据库连接字符串
- 确定表结构
- 为GridView绑定数据源
2. 批量添加数据
GridView控件具有内置的编辑、插入和删除功能,通过启用这些功能,可以实现直接在GridView中进行批量添加数据。
2.1 启用编辑、插入和删除功能
在GridView中启用编辑、插入和删除功能,可以使用以下属性:
- EditIndex:设置GridView当前正在编辑的行的索引。
- ShowFooter:设置是否显示GridView的页脚,通常用于添加新数据的表单。
- AutoGenerateInsertButton:设置是否在GridView的页脚中自动生成插入按钮。
- AutoGenerateDeleteButton:设置是否在GridView中自动生成删除按钮。
下面是一个示例,展示如何启用这些属性:
<asp:GridView ID="GridView1" runat="server" Autogeneratecolumns="false" Datakeynames="id"
OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting"
OnRowediting="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
<Columns>
<asp:BoundField DataField="id" HeaderText="ID" ReadOnly="true" SortExpression="id" />
<asp:BoundField DataField="name" HeaderText="Name" SortExpression="name" />
<asp:BoundField DataField="age" HeaderText="Age" SortExpression="age" />
<asp:TemplateField HeaderText="Operations">
<ItemTemplate>
<asp:LinkButton ID="btnEdit" runat="server" CommandName="Edit" Text="Edit" />
<asp:LinkButton ID="btnDelete" runat="server" CommandName="Delete" Text="Delete"
OnClientClick="return confirm('Do you really want to delete this record?');" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Text="Update" />
<asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
<asp:LinkButton ID="btnInsert" runat="server" CommandName="Insert" Text="Insert" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
在这个示例中,GridView的页脚包含添加新数据的表单,通过AutoGenerateInsertButton属性设置是否自动生成插入按钮,在模板字段中添加操作按钮,并通过EditIndex属性设置当前正在编辑的行的索引。
2.2 处理编辑、插入和删除事件
当用户点击GridView中的编辑、插入和删除按钮时,控件将引发相应的事件,开发人员可以在事件处理程序中编写代码对数据进行操作。
下面是一个示例,展示如何处理这些事件:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindData();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
var id = GridView1.DataKeys[e.RowIndex].Value.ToString();
var name = e.NewValues["name"].ToString();
var age = e.NewValues["age"].ToString();
// 更新数据库中的数据
GridView1.EditIndex = -1;
BindData();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
BindData();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
var id = GridView1.DataKeys[e.RowIndex].Value.ToString();
// 从数据库中删除数据
BindData();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert")
{
var txtName = GridView1.FooterRow.FindControl("txtName") as TextBox;
var txtAge = GridView1.FooterRow.FindControl("txtAge") as TextBox;
var name = txtName.Text.Trim();
var age = txtAge.Text.Trim();
// 插入数据到数据库
BindData();
}
}
在这个示例中,事件处理程序中的代码包含以下几个步骤:
- 获取数据
- 执行数据库操作
- 重新绑定数据
2.3 示例说明
下面是两个示例,展示如何在GridView中批量添加数据。
2.3.1 示例一
在这个示例中,通过在GridView的页脚中添加文本框和插入按钮,实现向数据库中添加一条新数据的功能。
<asp:GridView ID="GridView1" runat="server" Autogeneratecolumns="false" Datakeynames="id"
OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting"
OnRowediting="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="id" HeaderText="ID" ReadOnly="true" SortExpression="id" />
<asp:BoundField DataField="name" HeaderText="Name" SortExpression="name" />
<asp:BoundField DataField="age" HeaderText="Age" SortExpression="age" />
<asp:TemplateField HeaderText="Operations">
<ItemTemplate>
<asp:LinkButton ID="btnEdit" runat="server" CommandName="Edit" Text="Edit" />
<asp:LinkButton ID="btnDelete" runat="server" CommandName="Delete" Text="Delete"
OnClientClick="return confirm('Do you really want to delete this record?');" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Text="Update" />
<asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
<asp:LinkButton ID="btnInsert" runat="server" CommandName="Insert" Text="Insert" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCC99" />
</asp:GridView>
private void BindData()
{
var sql = "select * from users";
var adapter = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
var table = new DataTable();
adapter.Fill(table);
GridView1.DataSource = table;
GridView1.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert")
{
var txtName = GridView1.FooterRow.FindControl("txtName") as TextBox;
var txtAge = GridView1.FooterRow.FindControl("txtAge") as TextBox;
var name = txtName.Text.Trim();
var age = txtAge.Text.Trim();
var sql = "insert into users (name, age) values (@name, @age)";
var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
var cmd = new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@age", age);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
BindData();
}
}
在这个示例中,通过在GridView的页脚中添加文本框和插入按钮,实现向数据库中添加一条新数据的功能。
2.3.2 示例二
在这个示例中,通过读取Excel文件中的数据,批量向数据库中添加数据。
<asp:FileUpload ID="fileUpload" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<br /><br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="id">
<Columns>
<asp:BoundField DataField="id" HeaderText="ID" ReadOnly="true" />
<asp:BoundField DataField="name" HeaderText="Name" />
<asp:BoundField DataField="age" HeaderText="Age" />
</Columns>
</asp:GridView>
private void BindData()
{
var sql = "select * from users";
var adapter = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
var table = new DataTable();
adapter.Fill(table);
GridView1.DataSource = table;
GridView1.DataBind();
}
protected void btnUpload_Click(object sender, EventArgs e)
{
if (fileUpload.HasFile)
{
var filePath = Server.MapPath("~/App_Data/" + fileUpload.FileName);
fileUpload.SaveAs(filePath);
var stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
excelReader.IsFirstRowAsColumnNames = true;
var table = new DataTable();
table.Load(excelReader);
excelReader.Close();
var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
con.Open();
foreach (DataRow row in table.Rows)
{
var name = row["Name"].ToString();
var age = row["Age"].ToString();
var sql = "insert into users (name, age) values (@name, @age)";
var cmd = new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@age", age);
cmd.ExecuteNonQuery();
}
con.Close();
BindData();
}
}
在这个示例中,通过FileUpload控件上传Excel文件,在按钮单击事件中读取数据,并批量向数据库中添加数据。
3. 总结
通过启用GridView的编辑、插入和删除功能,以及处理相应的事件,可以方便地实现在GridView中批量添加数据的功能。同时,通过示例,演示了如何在GridView的页脚中添加表单,以及如何从Excel文件中读取数据并批量添加到数据库中。开发人员可以根据需求进行灵活运用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在ASP.NET 2.0中操作数据之六十四:GridView批量添加数据 - Python技术站