ثبت DataTable در ViewState و اتصال آن به GridView بدون استفاده از پایگاه داده
جمعه 28 خرداد 1395در این مقاله نحوه ی ذخیره سازی DataTable در Viewstate و نمایش رکوردها در GridView بدون استفاده از پایگاه داده را می آموزیم.
امروزه سوالات بسیاری پیرامون نحوه ی ذخیره سازی DataTable در Viewstate و همچنین نمایش رکورد های آن در GridView بدون استفاده از پایگاه داده برای کاربران وجود دارد. برای حل این مشکل ، ما یک مقاله در این زمینه گرد آوری کرده ایم . برای شروع ، ابتدا مراحل زیر را طی کنید:
1- "Start" - "All Programs" - "Microsoft Visual Studio "
2- "File" - "New WebSite" - "C#" - "Empty WebSite"
3-یک نام دلخواه برای پروژه انتخاب کنید و محل ذخیره سازی آن را نیز مشخص کنید.
4-سپس بر روی Solution Explorer کلیک راست کرده و گزینه ی "Add New Item" را بزنید و یک Web Form اضافه کنید.
5-یک دکمه و سه عدد TextBox به درون صفحه بیاورید.
6-حالا کدهای درون صفحه ی default.aspx به صورت زیر خواهند بود:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Save_DataTable_Into_ViewState.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>برنامه نویسان</title>
</head>
<body style="background-color: lightsteelblue" dir="rtl">
<form id="form1" runat="server">
<table style="color: White;margin-top:30px;margin-left:10px">
<tr>
<td>
نام نویسنده
</td>
<td>
نام کتاب
</td>
<td>
نوع کتاب
</td>
<td>
انتشارات
</td>
</tr>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
<asp:Button ID="AddProduct" runat="server" Style="color: White" Text="افزودن محصول"
OnClick="AddProduct_Click" BackColor="#999966" />
</td>
</tr>
</table>
<div style="margin-left:10px;margin-top:10px">
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" CellPadding="4"
ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField HeaderStyle-Width="120px" HeaderText="نام نویسنده" DataField="AuthorName" />
<asp:BoundField HeaderStyle-Width="120px" HeaderText=" نام کتاب" DataField="BookName" />
<asp:BoundField HeaderStyle-Width="120px" HeaderText=" نوع کتاب" DataField="BookType" />
<asp:BoundField HeaderStyle-Width="120px" HeaderText="انتشارات" DataField="Publisher" />
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
</div>
</form>
</body>
</html>
حالا به حالت design بروید. طرح صفحه باید به صورت زیر باشد:

حالا به بخش code behind صفحه بروید و کدهای زیر را برای ایجاد و ذخیره سازی datatable درون viewstate و همچنین اتصال آن به GridView بنویسید:
private void AddDefaultFirstRecord()
{
//creating dataTable
DataTable dt = new DataTable();
DataRow dr;
dt.TableName = "AuthorBooks";
dt.Columns.Add(new DataColumn("AuthorName", typeof(string)));
dt.Columns.Add(new DataColumn("BookName", typeof(string)));
dt.Columns.Add(new DataColumn("BookType", typeof(string)));
dt.Columns.Add(new DataColumn("Publisher", typeof(string)));
dr = dt.NewRow();
dt.Rows.Add(dr);
//saving databale into viewstate
ViewState["AuthorBooks"] = dt;
//bind Gridview
GridView1.DataSource = dt;
GridView1.DataBind();
}
حالا تابع بالا را درون رویداد Page Load صفحه فراخوانی کنید تا رکوردهای ابتدایی به صفحه اضافه شوند:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddDefaultFirstRecord();
}
}
یک تابع با کدهای زیر وارد کنید تا داده ها را درون data table با استفاده از view state ذخیره سازی کند و سپس رکوردها را برای اتصال به GridView آماده کند.
private void AddNewRecordRowToGrid()
{
// check view state is not null
if (ViewState["AuthorBooks"] != null)
{
//get datatable from view state
DataTable dtCurrentTable = (DataTable)ViewState["AuthorBooks"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//add each row into data table
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["AuthorName"] = TextBox1.Text;
drCurrentRow["BrandName"] = TextBox2.Text;
drCurrentRow["Warrenty"] =TextBox3.Text;
drCurrentRow["Price"] =TextBox4.Text;
}
//Remove initial blank row
if (dtCurrentTable.Rows[0][0].ToString() == "")
{
dtCurrentTable.Rows[0].Delete();
dtCurrentTable.AcceptChanges();
}
//add created Rows into dataTable
dtCurrentTable.Rows.Add(drCurrentRow);
//Save Data table into view state after creating each row
ViewState["AuthorBooks"] = dtCurrentTable;
//Bind Gridview with latest Row
GridView1.DataSource = dtCurrentTable;
GridView1.DataBind();
}
}
}
کدهای کامل صفحه ی default.aspx.cs به صورت زیر خواهند بود:
using System;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddDefaultFirstRecord();
}
}
protected void AddProduct_Click(object sender, EventArgs e)
{
AddNewRecordRowToGrid();
}
private void AddDefaultFirstRecord()
{
//creating dataTable
DataTable dt = new DataTable();
DataRow dr;
dt.TableName = "AuthorBooks";
dt.Columns.Add(new DataColumn("AuthorName", typeof(string)));
dt.Columns.Add(new DataColumn("BookName", typeof(string)));
dt.Columns.Add(new DataColumn("BookType", typeof(string)));
dt.Columns.Add(new DataColumn("Publisher", typeof(string)));
dr = dt.NewRow();
dt.Rows.Add(dr);
//saving databale into viewstate
ViewState["AuthorBooks"] = dt;
//bind Gridview
GridView1.DataSource = dt;
GridView1.DataBind();
}
private void AddNewRecordRowToGrid()
{
// check view state is not null
if (ViewState["AuthorBooks"] != null)
{
//get datatable from view state
DataTable dtCurrentTable = (DataTable)ViewState["AuthorBooks"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//add each row into data table
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["AuthorName"] = TextBox1.Text;
drCurrentRow["BookName"] = TextBox2.Text;
drCurrentRow["BookType"] =TextBox3.Text;
drCurrentRow["Publisher"] =TextBox4.Text;
}
//Remove initial blank row
if (dtCurrentTable.Rows[0][0].ToString() == "")
{
dtCurrentTable.Rows[0].Delete();
dtCurrentTable.AcceptChanges();
}
//add created Rows into dataTable
dtCurrentTable.Rows.Add(drCurrentRow);
//Save Data table into view state after creating each row
ViewState["AuthorBooks"] = dtCurrentTable;
//Bind Gridview with latest Row
GridView1.DataSource = dtCurrentTable;
GridView1.DataBind();
}
}
}
}
حالا برنامه را اجرا کنید. خروجی به صورت زیر خواهد بود:

حالا چند داده در textbox ها وارد کنید بر روی دکمه ی افزودن کلیک کنید. می بینید که داده ها در GridView نمایش داده خواهند شد:

امیدوارم از این مقاله لذت برده باشید.
- ASP.net
- 2k بازدید
- 2 تشکر