สอบถามเรื่องนำค่าที่ได้จาก TextBox ใสใน GridView โดยที่ไม่ต้องเก็บลง Database ก่อน แต่เก็บไว้ใน ViewState
ได้แล้วครับ อิอิ
Code (C#)
private DataTable dTable;
private DataRow dRow;
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
ViewState["dTable"] = new DataTable();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strCol = { "txt1", "txt2"};
dTable = (DataTable)ViewState["dTable"];
foreach (string str in strCol)
{
if (!dTable.Columns.Contains(str))
{
dTable.Columns.Add(str);
}
}
dRow = dTable.NewRow();
foreach (string str in strCol)
{
switch (str)
{
case "txt1":
dRow[str] = TextBox1.Text;
break;
case "txt2":
dRow[str] = TextBox2.Text;
break;
}
}
dTable.Rows.Add(dRow);
ViewState["dTable"] = dTable;
GridView1.DataSource = ViewState["dTable"];
GridView1.DataBind();
}
Date :
2011-08-17 00:12:40
By :
loogway
ทำไมไม่ใช้
Code (VB.NET)
DataGridView.Rows.Add(textbox1,textbox2)
ผลที่ได้ก็คือ ถ้ากดปุ่มมันก็จะ add row ไปรื่อยๆ ครับ ตามที่เรากรอกครับ บรรทัดเดียวจบ
ประวัติการแก้ไข 2011-08-17 19:36:57
Date :
2011-08-17 19:35:48
By :
slurpee55555
ตัวอย่างการสร้าง Session กับ DataTable ที่ไม่ได้มาจาก Database
Code (VB.NET)
Dim dt As New DataTable
Dim dr As DataRow
'*** Column ***'
dt.Columns.Add("CustomerID")
dt.Columns.Add("Name")
dt.Columns.Add("Email")
dt.Columns.Add("CountryCode")
dt.Columns.Add("Budget")
dt.Columns.Add("Used")
'*** Rows ***'
dr = dt.NewRow
dr("CustomerID") = "C001"
dr("Name") = "Win Weerachai"
dr("Email") = "[email protected] "
dr("CountryCode") = "TH"
dr("Budget") = "1000000"
dr("Used") = "600000"
dt.Rows.Add(dr)
Session("myCart") = dt
แต่ถ้าต้องการเพิ่มตำแหน่งใน Session ของ DataTable ก็ไม่ยากครับ
Code (VB.NET)
Dim dt As DataTable = CType(Session("myCart"),DataTable)
Dim dr As DataRow
'*** Rows ***'
dr = dt.NewRow
dr("CustomerID") = "C003"
dr("Name") = "Tony Stark"
dr("Email") = "[email protected] "
dr("CountryCode") = "US"
dr("Budget") = "3000000"
dr("Used") = "600000"
dt.Rows.Add(dr)
Session("myCart") = dt
สามารถนำ Session ไปยัดลง DataSource ของ GridView ได้เลยครับ
Code (VB.NET)
Me.GridView.DataSource = CType(Session("myCart"),DataTable)
Me.DataBid()
Date :
2011-08-17 20:34:19
By :
webmaster
อ๋อครับ ดูผิด
Date :
2011-08-17 20:41:38
By :
slurpee55555
ต่อจากกระทู่ด้านบนมีเป็นหานิดนึ่งนะครับคือใช้คำสั่งลบยังไงครับ...อิอิ
คือว่าให้คลิกที่ปุ่มลบใน GridView แล้วให้มันลบที่ละ Row นะครับคำสั่งที่ผมเขียนมันไม่ลบให้นะครับ อิอิ
ช่วยดูช่วยทีหรือว่ามีวิธีที่ดีง่ายกว่านี้ช่วยแนะนำที่ครับ...
Code (PHP)
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Default3 : System.Web.UI.Page
{
private DataTable dTable;
private DataRow dRow;
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
ViewState["dTable"] = new DataTable();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strCol = { "CategoryID", "CategoryName" };
dTable = (DataTable)ViewState["dTable"];
foreach (string str in strCol)
{
if (!dTable.Columns.Contains(str))
{
dTable.Columns.Add(str);
}
}
dRow = dTable.NewRow();
foreach (string str in strCol)
{
switch (str)
{
case "CategoryID":
dRow[str] = TextBox1.Text;
break;
case "CategoryName":
dRow[str] = TextBox2.Text;
break;
}
}
dTable.Rows.Add(dRow);
ViewState["dTable"] = dTable;
GridView1.DataSource = ViewState["dTable"];
GridView1.DataBind();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].HorizontalAlign = HorizontalAlign.Center;
GridView1.Rows[i].Cells[1].HorizontalAlign = HorizontalAlign.Center;
GridView1.Rows[i].Cells[2].HorizontalAlign = HorizontalAlign.Left;
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
ImageButton l = (ImageButton)e.Row.FindControl("ImageButton1");
l.Attributes.Add("onclick", "javascript:return " +
"confirm('คุณต้องการลบข้อมูล ใช่หรือไม่ " +
DataBinder.Eval(e.Row.DataItem, "CategoryID") + "')");
}
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int categoryID = (int)GridView1.DataKeys[e.RowIndex].Value;
DeleteRecordByID(categoryID);
}
private void DeleteRecordByID(int categoryID)
{
Response.Write(categoryID);
int Grid = GridView1.Rows.Count;
for (int i = 0; i < Grid; i++)
{
if (categoryID != null)
{
GridView1.DeleteRow(categoryID);
}
}
GridView1.DataBind();
}
protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
int categoryID = Convert.ToInt32(e.CommandArgument);
// Delete the record
DeleteRecordByID(categoryID);
}
}
}
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<asp:GridView ID="GridView1" runat="server" onrowcommand="GridView1_RowCommand"
onrowdatabound="GridView1_RowDataBound" onrowdeleted="GridView1_RowDeleted"
onrowdeleting="GridView1_RowDeleting">
<Columns>
<asp:TemplateField HeaderText="ลบ">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/Delete_16x16.png" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
ประวัติการแก้ไข 2011-08-17 21:37:41
Date :
2011-08-17 21:35:31
By :
loogway
หา Index ที่จะลบแล้วใช้คำสั่ง
Code (C#)
Customers.Rows[0].Delete();
0 คือ Index ของ Rows ครับ
Date :
2011-08-17 21:41:58
By :
webmaster
พอใจมีตัวอย่างพอเป็นแนวทางป่าวครับ...อิอิ
Date :
2011-08-20 14:11:58
By :
loogway
Load balance : Server 05