如何在asp.net C# Webform中制作像网格一样的Excel
Posted
技术标签:
【中文标题】如何在asp.net C# Webform中制作像网格一样的Excel【英文标题】:How can I make Excel like grid in asp.net C# Webform 【发布时间】:2015-05-16 08:10:52 【问题描述】:如何在 ASP.NET WebForms 中制作类似于 Excel 中的网格?
我想要用户可以输入数据的行和列,点击保存按钮后,数据将被插入到数据库中。
【问题讨论】:
【参考方案1】:希望这将帮助您满足您的要求。这里我只提供 aspx 和 c# 编码。创建和修改您的数据库并相应地更改代码。这里我使用直接插入语句,您可以使用存储过程。
数据库中的表:-
page.aspx :-
<asp:GridView ID="excelgrd" runat="server" AutoGenerateColumns="false" ShowFooter="true">
<Columns>
<asp:BoundField DataField="Slno" HeaderText="SL No" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:TextBox ID="txnm" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:TextBox ID="txdesc" runat="server"></asp:TextBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
<asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="svbtn" runat="server" Text="Save" OnClick="svbtn_Click" />`
页面后面的代码:-
`
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DBCS"].ToString());
protected void Page_Load(object sender, EventArgs e)
if(!IsPostBack)
bindgrd();//bind your grid
private void bindgrd()
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("Slno", typeof(string)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Desc", typeof(string)));
dr = dt.NewRow();
dr["Slno"] = 1;
dr["Name"] = string.Empty;
dr["Desc"] = string.Empty;
dt.Rows.Add(dr);
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
excelgrd.DataSource = dt;
excelgrd.DataBind();
protected void addnewrow()
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
//extract the TextBox values
TextBox tx1 = (TextBox)excelgrd.Rows[rowIndex].Cells[1].FindControl("txnm");
TextBox tx2 = (TextBox)excelgrd.Rows[rowIndex].Cells[2].FindControl("txdesc");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["Slno"] = i + 1;
dtCurrentTable.Rows[i - 1]["Name"] = tx1.Text;
dtCurrentTable.Rows[i - 1]["Desc"] = tx2.Text;
rowIndex++;
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
excelgrd.DataSource = dtCurrentTable;
excelgrd.DataBind();
else
Response.Write("ViewState is null");
//Set Previous Data on Postbacks
SetPreviousData();
private void SetPreviousData()
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
for (int i = 0; i < dt.Rows.Count; i++)
TextBox tx1 = (TextBox)excelgrd.Rows[rowIndex].Cells[1].FindControl("txnm");
TextBox tx2 = (TextBox)excelgrd.Rows[rowIndex].Cells[2].FindControl("txdesc");
tx1.Text = dt.Rows[i]["Name"].ToString();
tx2.Text = dt.Rows[i]["Desc"].ToString();
rowIndex++;
protected void svbtn_Click(object sender, EventArgs e)
foreach(GridViewRow r in excelgrd.Rows)
string des =(r.FindControl("txdesc") as TextBox).Text;
string nm = (r.FindControl("txnm") as TextBox).Text;
try
con.Open();
SqlCommand sql = new SqlCommand("insert into test (name,name_desc) values('"+nm+"','"+des+"')", con);
sql.ExecuteNonQuery();
sql.Dispose();
catch (Exception e1)
string error = e1.ToString();
finally
con.Close();
protected void ButtonAdd_Click(object sender, EventArgs e)
addnewrow();
`
【讨论】:
感谢兄弟,现在非常有帮助,我只想再问一件事,我可以针对一个 id 存储不同的行数据 欢迎您。是的,您可以针对一个 id 存储数据,此处来自 gridview 的 slno 未保存在表中。表有一个自动生成的列 ID。一件事我是女性用户。 是的,非常感谢您帮助我 非常感谢。但是,如果我要使用复选框而不是文本框?在 addnewrow()、svbtn_Click 和 SetPreviousData() 的代码中,应该使用哪些命令来替换 .Text、.ToString 等。希望你能帮助我谢谢 所以对于CheckBox
,您的列类型将为bool
,在addnewrow() , svbtn_Click, and SetPreviousData()
中,使用.checked
。希望您了解将发生哪些变化。如果不再评论。以上是关于如何在asp.net C# Webform中制作像网格一样的Excel的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.Net WebForm 中调用 Web API?
怎么获取提示框的返回值(C# 、asp.net、webform)
Asp.net webform 控件是不是具有像 Winforms 控件一样的最高功能?
Hello Blazor:像ASP.NET WebForm一样写代码