Web(ASP.Net C#) นำค่าจาก textbox ไปแสดงใน label(item template)ครับ ช่วยหน่อยนะครับ!!! ขอบคุณล่วงหน้าครับพี่ๆ
จังหวะที่เราวนลูปอ่านค่าใน excel ก็ให้ยัดค่า Excel no ไปด้วยครับ
จากนั้นค่อย Bind Grid ครับ
Date :
2012-11-26 17:35:55
By :
Niratiam
ช่วยแนะนำหน่อยได้ไมครับผมยังไม่ค่อยเข้าใจเท่าไรว่าต้องแทรก Excel No. ลงไปตรงไหน ขอบคุณครับ
จริงๆผมนำเข้าข้อมูล Excel ลงในDBได้แล้ว เพียงแต่อยากให้มันได้เลข Excel No. ลงไปทุกๆแถวของการนำเข้า DB (เพราะเลข Excel No. จะใช้เวลาที่ค้นหา เปรียบเสมือนรหัสของการ อัพโหลดแต่ละคนอ่ะครับ) แล้วผมค่อยดึงมาโชว์ที่ Gridview ทีหลังก็ได้ แต่ผมทำไม่เป็นอะไร งงครับ เลยจะให้ดึงลง Grid ก่อนแล้วค่อยนำเข้า DB แบบซื่อๆ รบกวนช่วยเหลือแนะนำหน่อยนะครับ ขอบคุณอีกครั้งครับ
Code (C#)
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName);
string FolderPath2 = ConfigurationManager.AppSettings["FolderPath2"];
string FilePath = Server.MapPath(FolderPath2 + FileName);
FileUpload1.SaveAs(FilePath);
Label1.Text = "File Saved to: " + FilePath;
Import_To_Grid(FilePath, Extension, RadioButtonList1.SelectedItem.Text);
}
//*** ส่วน Auto Gen...to TextBox ***//
int r;
try
{
SqlCommand cmd = new SqlCommand("Select max(MasterID) from Masterkey", objConn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
string d = dr[0].ToString();
if (d == "")
{
TextBox1.Text = "1";
}
else
{
r = Convert.ToInt32(dr[0].ToString());
r = r + 1;
TextBox1.Text = r.ToString();
}
}
objConn.Close();
objConn.Open();
cmd.CommandText = "insert Masterkey values('" + TextBox1.Text + "')";
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write("<script>alert(" + ex.Message + ")</script>");
}
finally
{
objConn.Close();
}
}
private void Import_To_Grid(string FilePath, string Extension, string isHDR)
{
string conStr = "";
switch (Extension)
{
case ".xls": //Excel 97-03
conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]
.ConnectionString;
break;
case ".xlsx": //Excel 07
conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]
.ConnectionString;
break;
}
conStr = String.Format(conStr, FilePath, isHDR);
OleDbConnection connExcel = new OleDbConnection(conStr);
OleDbCommand cmdExcel = new OleDbCommand();
OleDbDataAdapter oda = new OleDbDataAdapter();
DataTable dt = new DataTable();
cmdExcel.Connection = connExcel;
//Get the name of First Sheet
connExcel.Open();
DataTable dtExcelSchema;
dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
connExcel.Close();
//Read Data from First Sheet
connExcel.Open();
cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
oda.SelectCommand = cmdExcel;
oda.Fill(dt);
connExcel.Close();
//Bind Data to GridView
GridView1.Caption = Path.GetFileName(FilePath);
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void PageIndexChanging(object sender, GridViewPageEventArgs e)
{
string FolderPath = ConfigurationManager.AppSettings["FolderPath"];
string FileName = GridView1.Caption;
string Extension = Path.GetExtension(FileName);
string FilePath = Server.MapPath(FolderPath + FileName);
Import_To_Grid(FilePath, Extension, RadioButtonList1.SelectedItem.Text);
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
SqlTransaction tr = objConn.BeginTransaction();
SqlCommand cmd = objConn.CreateCommand();
try
{
cmd.CommandType = CommandType.Text;
cmd.Transaction = tr;
string username;
string password;
string fname;
string lname;
//Loop เอาค่าใน GridView Insert ลง Base
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
username = GridView1.Rows[i].Cells[0].Text.Trim();
password = GridView1.Rows[i].Cells[1].Text.Trim();
fname = GridView1.Rows[i].Cells[2].Text.Trim();
lname = GridView1.Rows[i].Cells[3].Text.Trim();
cmd.CommandText = "Insert Into Sheet1 (username,password,fname,lname) " +
" values ('" + username + "','" + password + "','" + fname + "','" + lname + "')";
cmd.ExecuteNonQuery();
}
tr.Commit();
Label2.Text = "บันทึกข้อมูลเรียบร้อย";
}
catch (SqlException ex)
{
tr.Rollback();
Label2.Text = "Error - TRANSACTION ROLLED BACK\n" + ex.Message;
}
catch (Exception ex)
{
tr.Rollback();
Label2.Text = "System Error\n" + ex.Message;
}
finally
{
objConn.Close();
tr.Dispose();
}
Date :
2012-11-27 08:56:21
By :
SponG_Gy
Code (C#)
//Bind Data to GridView
DataTable dt2 = new DataTable ();
DataRow dr2 = new DataRow();
foreach(DataRow dr in dt.Rows) // วนดึงค่าจาก dt ที่คุณ Fill ไว้แล้วครับ
{
dr2 = dt2.newRow();
dr2[0] = txtExcelNo.Text; // ตรงนี้เก็บค่า Excel No ครับ
dr2[1] = dr[0].ToString();
dr2[2] = dr[1].ToString();
dr2[3] = dr[2].ToString();
dr2[4] = dr[3].ToString();
dt2.Rows.Add(dr2);
}
GridView1.DataSource = dt2;
GridView1.DataBind();
ลองดูนะครับ
ประวัติการแก้ไข 2012-11-27 09:48:18
Date :
2012-11-27 09:36:22
By :
Niratiam
ผมลองนำไปใส่ตรง //Bind Data to GridView แล้วครับแต่ Error
dr2[0] = TextBox1.Text; //Errorแบบนี้ตอนที่คลิก Upload ครับ "Cannot find column 0."
หรือว่าผมใส่ผิดยังไงช่วยทีนะครับ ขอบคุณครับคุณ Niratiam
ประวัติการแก้ไข 2012-11-27 10:29:42
Date :
2012-11-27 10:13:34
By :
SponG_Gy
Code (C#)
//Bind Data to GridView
DataTable dt2 = new DataTable ();
dt2.Columns.Add("excelno", typeof(string));
dt2.Columns.Add("username", typeof(string));
dt2.Columns.Add("password", typeof(string));
dt2.Columns.Add("fname", typeof(string));
dt2.Columns.Add("lname", typeof(string));
foreach(DataRow dr in dt.Rows) // วนดึงค่าจาก dt ที่คุณ Fill ไว้แล้วครับ
{
DataRow dr2 = dt2.newRow();
dr2["excelno"] = txtExcelNo.Text; // ตรงนี้เก็บค่า Excel No ครับ
dr2["username"] = dr[0].ToString();
dr2["password"] = dr[1].ToString();
dr2[fname] = dr[2].ToString();
dr2[lname] = dr[3].ToString();
dt2.Rows.Add(dr2);
}
GridView1.DataSource = dt2;
GridView1.DataBind();
งั้นลองดูแบบนี้ครับ
Date :
2012-11-27 10:41:28
By :
Niratiam
ได้แล้วครับ แต่แปลกมากใน Gridview ไม่เห็นตัวเลขขึ้น แต่พอผมลองแก้ปุ่ม Save To DB แล้วนำเข้า Base กลับมีเลข
ยังไงก็ขอบคุณมากมากนะครับ คุณ Niratiam ผมทำไม่ได้มาหลายวัน ขอบคุณครับ ;)
ประวัติการแก้ไข 2012-11-27 11:17:00
Date :
2012-11-27 11:14:26
By :
SponG_Gy
ขอบคุณมากนะครับ คุณ Niratiam
ผมก็ยังหาสาเหตุที่ excelno ไม่โชว์ใน Gridview ไม่ได้อยู่ดี...
แต่ตอนนี้ผมสร้างคอลัม id ขึ้นมาเพิ่มเพื่อให้ Gridview Generate ลำดับเลขขึ้นมาตามจำนวนแถว
เช่น ไฟล์ Excel มี 10 // คอลัมม์ id ก็จะขึ้นเป็น 1-10 แล้วนำเข้า DB อันนี้ผมทำได้ครับ โดยผมสร้าง Label ใน Item Template แล้ว Code-Behind ผมใช้
Code (C#)
int i = 1;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblid = (Label)e.Row.FindControl("lblid ");
lblid.Text = i.ToString();
i++;
}
}
แต่ปัญหาคือว่า ถ้าครั้งต่อๆไปมีการอัพโหลดอีก เลขมันก็จะเริ่มที่ 1 เสมอ จะมีวิธีที่จะดึงเลขสูงสุดของฐานข้อมูล(ตาราง Detail ในคอลัมม์ id)มาเป็นเลขเริ่มต้องบ้างไมครับ ถ้าคุณทราบก็รบกวนช่วยผมหน่อยนะครับ แต่ถ้ารบกวนเกินไปก็ไม่เป็นไรครับ ยังไงก็ต้องขอบคุณมากนะครับสำหรับคำแนะนำดีดีก่อนหน้านี้...ขอบคุณครับ
Date :
2012-11-27 15:37:36
By :
SponG_Gy
ขอดู code กับ หน้าผลลัพธ์ หน่อยครับ พอดีอ่านแล้วงงๆ ครับ
Date :
2012-11-27 15:48:46
By :
Niratiam
Code (C#)
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblid = (Label)e.Row.FindControl("lblid");
lblid.Text = ((GridView1.PageIndex * GridView1.PageSize) + e.Row.RowIndex + 1).ToString();
}
}
คือ id ตอนนี้ล่าสุดเป็น 3 แต่อัพโหลดใหม่อยากให้ขึ้นเป็น 4,5,6,...ไม่งั้น id ก็จะไม่เรียงอะครับ
Date :
2012-11-27 16:26:31
By :
SponG_Gy
Code (C#)
private void chkLast()
{
GridViewRow row = GridView1.Rows[GridView1.Rows.Count - 1];
Label lblid = (Label)row.FindControl("lblid");
i = Convert.ToInt32(lblid.Text) + 1;
}
อันนี้ลองไป Check last row อ่ะครับ แล้วเราจะได้ค่า id + 1 ครับ
ประวัติการแก้ไข 2012-11-27 16:57:39 2012-11-27 16:58:23
Date :
2012-11-27 16:57:01
By :
Niratiam
อ่อ คือพอได้ id 1,2,3 แล้วผมก็จะ นำเข้า db ms sql อะครับ แล้วอยากให้เวลา อัพโหลดครั้งต่อไปคือ run page ใหม่ แล้วอัพโหลด จะได้ id 4,5,6 พอครั้งต่อไปที่ run page ใหม่ก็จะเป็น 7,8,9 อันนี้ต้องไป select max จาก db ก่อนรึปล่าวครับ แล้วค่อยวางลง คอลัมม์ id รบกวนแนะนำด้วยครับ ขอบคุณครับ
Date :
2012-11-27 17:10:59
By :
SponG_Gy
อ่อ ถ้านำเข้า db แล้ว ก็ select max ขึ้นมาเลยก็ได้ครับ ง่ายสุดเลยครับ
Date :
2012-11-27 17:19:30
By :
Niratiam
คุณ Niratiam จากที่ผมทำไว้อะครับ ตอนนี้มีปัญหาอีกแล้วครับ
คือผมต้องการให้เลือก checkbox ก่อนเข้า database อะครับ ผมจะต้องเขียนโค๊ดยังไงครับ พอจะแนะนำได้ไมครับ ตอนนี้ผมวาง template ใน gridview แล้วใส่ checkbox ไว้ แต่ไม่รู้ว่าจะต้องเขียนคำสั่งยังไง โดยให้แถวที่่เลือกถูก check แล้วนำเข้าแต่แถวที่ถูกเลือกครับ ช่วยชี้แนะหน่อยนะครับ ขอบคุณมากครับ
จากภาพผมก็จะเลือก 2 แถว แล้วพอกด ปุ่ม Save to db แล้วจะนำเข้าเพียงแถวที่ผมเลือกจาก grid อะครับ ยังไงรบกวนคุณ Niratiam หน่อยนะครับ ผมพยายามลองทำมาหลายวันยังไม่ได้ ขอบคุณมากครับ
Date :
2012-11-30 10:36:37
By :
SponG_Gy
ผมใช้วิธีแบบนี้ครับ เอาไป check ใน event Save To DB ครับ
Code (C#)
int rowCount = GridView.Rows.Count; // นับ Row ใน GridView ครับ
for (int i = 0; i < rowCount; i++)
{
GridViewRow row = GridView.Rows[i];
CheckBox cbselect = (CheckBox)row.FindControl("cbSelect");
Label lblUsername = (Label)row.FindControl("lblUsername ");
Label lblPassword= (Label)row.FindControl("lblPassword");
Label lblFname= (Label)row.FindControl("lblFName");
Label lblLName= (Label)row.FindControl("lblLName");
if (cbselect.Checked == true) // check แถวที่ select ตรงนี้ครับ
{
เอาค่าที่ได้มา insert ที่นี่ครับ
}
}
ลองประยุกต์ใช้ดูนะครับ
ประวัติการแก้ไข 2012-11-30 11:36:53
Date :
2012-11-30 11:35:21
By :
Niratiam
ขอบคุณครับ ผมลองดูแล้ว ไม่ error อะไร แต่ แถวที่เลือก ไม่เข้า DB เลยอะครับ ผมทำส่วนไหนผิดรึปล่าวครับ
Code (C#)
//ปุ่ม Save to db
protected void Button2_Click(object sender, EventArgs e)
{
SqlTransaction tr = objConn.BeginTransaction();
SqlCommand cmd = objConn.CreateCommand();
try
{
cmd.CommandType = CommandType.Text;
cmd.Transaction = tr;
int rowCount = GridView1.Rows.Count; // นับ Row ใน GridView ครับ
for (int j = 0; j < rowCount; j++)
{
GridViewRow row = GridView1.Rows[j];
CheckBox cbselect = (CheckBox)row.FindControl("cbSelect");
Label lblMasterID = (Label)row.FindControl("lblMasterID");
Label lblUsername = (Label)row.FindControl("lblUsername ");
Label lblPassword= (Label)row.FindControl("lblPassword");
Label lblFname= (Label)row.FindControl("lblFName");
Label lblLName= (Label)row.FindControl("lblLName");
if (cbselect.Checked == true) // check แถวที่ select ตรงนี้ครับ
{
//ส่วนการ Insert เข้า DB
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
string MasterID = GridView1.Rows[i].Cells[1].Text.Trim();
string username = GridView1.Rows[i].Cells[2].Text.Trim();
string password = GridView1.Rows[i].Cells[3].Text.Trim();
string fname = GridView1.Rows[i].Cells[4].Text.Trim();
string lname = GridView1.Rows[i].Cells[5].Text.Trim();
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " +
" values ('" + TextBox1.Text + "','" + username + "','" + password + "','" + fname + "','" + lname + "')";
}
}
cmd.ExecuteNonQuery();
}
tr.Commit();
Label2.Text = "บันทึกข้อมูลเรียบร้อย";
}
catch (SqlException ex)
{
tr.Rollback();
Label2.Text = "Error - TRANSACTION ROLLED BACK\n" + ex.Message;
}
catch (Exception ex)
{
tr.Rollback();
Label2.Text = "System Error\n" + ex.Message;
}
finally
{
objConn.Close();
tr.Dispose();
}
Date :
2012-11-30 11:59:34
By :
SponG_Gy
เอาค่า Label ไปใส่แทนได้เลยครับ
Code (C#)
if (cbselect.Checked == true) // check แถวที่ select ตรงนี้ครับ
{
//ส่วนการ Insert เข้า DB
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " +
" values ('" + lblMasterID.Text.Trim() + "','" + lblUsername.Text.Trim() + "','" + lblPassword.Text.Trim() + "','" + lblFname.Text.Trim() + "','" + lblLName.Text.Trim() + "')";
}
}
Date :
2012-11-30 13:03:18
By :
Niratiam
ผมลองแล้วนะครับคุณ Niratiam ก็ยังไม่ได้อะครับ รันได้ไม่มี Error แต่ check เลือกแถว ไม่เข้า DB เลยครับ ไม่ทราบผมทำผิดส่วนไหนรึเปล่าครับ ขอบคุณครับ
Code (C#)
//ปุ่ม Save to db
protected void Button2_Click(object sender, EventArgs e)
{
SqlTransaction tr = objConn.BeginTransaction();
SqlCommand cmd = objConn.CreateCommand();
try
{
cmd.CommandType = CommandType.Text;
cmd.Transaction = tr;
int rowCount = GridView1.Rows.Count; // นับ Row ใน GridView ครับ
for (int j = 0; j < rowCount; j++)
{
GridViewRow row = GridView1.Rows[j];
CheckBox cbselect = (CheckBox)row.FindControl("cbselect");
Label lblMasterID = (Label)row.FindControl("lblMasterID");
Label lblusername = (Label)row.FindControl("lblusername ");
Label lblpassword = (Label)row.FindControl("lblpassword");
Label lblfname = (Label)row.FindControl("lblfname");
Label lbllname = (Label)row.FindControl("lbllname");
if (cbselect.Checked == true) // check แถวที่ select ตรงนี้ครับ
{
//ส่วนการ Insert เข้า DB
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " + " values ('" + lblMasterID.Text.Trim() + "','" + lblusername.Text.Trim() + "','" + lblpassword.Text.Trim() + "','" + lblfname.Text.Trim() + "','" + lbllname.Text.Trim() + "')";
}
cmd.ExecuteNonQuery();
}
}
tr.Commit();
Label2.Text = "บันทึกข้อมูลเรียบร้อย";
}
catch (SqlException ex)
{
tr.Rollback();
Label2.Text = "Error - TRANSACTION ROLLED BACK\n" + ex.Message;
}
catch (Exception ex)
{
tr.Rollback();
Label2.Text = "System Error\n" + ex.Message;
}
finally
{
objConn.Close();
tr.Dispose();
}
}
Date :
2012-12-03 09:03:46
By :
SponG_Gy
Code (C#)
for (int j = 0; j < rowCount; j++)
{
GridViewRow row = GridView1.Rows[j];
CheckBox cbselect = (CheckBox)row.FindControl("cbselect");
Label lblMasterID = (Label)row.FindControl("lblMasterID");
Label lblusername = (Label)row.FindControl("lblusername ");
Label lblpassword = (Label)row.FindControl("lblpassword");
Label lblfname = (Label)row.FindControl("lblfname");
Label lbllname = (Label)row.FindControl("lbllname");
if (cbselect.Checked == true) // check แถวที่ select ตรงนี้ครับ
{
//ส่วนการ Insert เข้า DB
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " + " values ('" + lblMasterID.Text.Trim() + "','" + lblusername.Text.Trim() + "','" + lblpassword.Text.Trim() + "','" + lblfname.Text.Trim() + "','" + lbllname.Text.Trim() + "')";
cmd.ExecuteNonQuery();
}
tr.Commit();
Label2.Text = "บันทึกข้อมูลเรียบร้อย";
}
เหมือนจะวนเกินมา ลูปนึงครับ ลองแก้ตามด้านบนดูอีกทีครับ
ประวัติการแก้ไข 2012-12-03 09:33:32
Date :
2012-12-03 09:32:54
By :
Niratiam
ลองเอา loop ออกตามบนแล้วยังไม่ได้ครับ ไม่ error แต่ insert ไม่เข้า DB ครับ
Date :
2012-12-03 10:01:10
By :
SponG_Gy
ลองเช็คพวก id ของพวก Label Checkbox ว่าตรงกันไหมครับ
ขอดู code ของหน้า design หน่อยครับ
Date :
2012-12-03 10:12:40
By :
Niratiam
นี่ครับ หน้า Design
Code (C#)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="lblText" runat="server"></asp:Label>
<br />
<br />
Excel No. :
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<br />
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Uploads" />
<asp:Label ID="Label2" runat="server" Text="Label" Visible="False"></asp:Label>
<br />
<br />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click"
Text="Save To DB" />
<br />
<asp:RadioButtonList ID="RadioButtonList1" runat="server" Height="16px"
RepeatDirection="Horizontal" Visible="False" Width="129px">
<asp:ListItem Selected="True">ใช้</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:GridView ID="GridView1" runat="server" BackColor="#CCCCCC"
BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4"
CellSpacing="2" ForeColor="Black" onrowdatabound="GridView1_RowDataBound"
style="margin-right: 0px">
<Columns>
<asp:TemplateField HeaderText="select">
<ItemTemplate>
<asp:CheckBox ID="cbselect" runat="server" AutoPostBack="True"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCCCC" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
<RowStyle BackColor="White" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#808080" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#383838" />
</asp:GridView>
<br />
</div>
</form>
</body>
</html>
Date :
2012-12-03 10:22:28
By :
SponG_Gy
อย่างแรกครับ ลอง set AutoPostBack = False ใน cbselect ก่อนครับ
อย่างสอง คุณใช้ AutoGenerateColumns ของ Gridview ไม่ได้ Binding Manaul ดังนั้นทำให้ไม่มีพวก Control ที่เรา Find ไว้ครับ
ให้ลองแก้ตามด้านล่างนี่ครับ
Code (C#)
for (int j = 0; j < rowCount; j++)
{
GridViewRow row = GridView1.Rows[j];
CheckBox cbselect = (CheckBox)row.FindControl("cbselect");
string lblMasterID = row.Cells[2].Text;
string lblusername = row.Cells[3].Text;
string lblpassword = row.Cells[4].Text;
string lblfname = row.Cells[5].Text;
string lbllname = row.Cells[6].Text;
if (cbselect.Checked == true) // check แถวที่ select ตรงนี้ครับ
{
//ส่วนการ Insert เข้า DB
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " + " values ('" + lblMasterID + "','" + lblusername + "','" + lblpassword + "','" + lblfname + "','" + lbllname + "')";
cmd.ExecuteNonQuery();
}
tr.Commit();
Label2.Text = "บันทึกข้อมูลเรียบร้อย";
}
ลองดูครับ
Date :
2012-12-03 10:45:47
By :
Niratiam
ขอบคุณนะครับ ผมลอง code คุณ Niratiam แล้ว test ยังไม่เข้า DB เลยลองแก้ cell [] เป็นแบบนี้
Code (C#)
CheckBox cbselect = (CheckBox)row.FindControl("cbselect");
string lblMasterID = row.Cells[1].Text;
string lblusername = row.Cells[2].Text;
string lblpassword = row.Cells[3].Text;
string lblfname = row.Cells[4].Text;
string lbllname = row.Cells[5].Text;
ปรากฎว่าเข้า DB แต่ขึ้น Error...ตามรูปข้างล่างตลอด เป็นเพราะอะไรหรอครับ แล้วผมลองเลือกแถวที่ 3 เป็นต้นไปข้อมูลก็จะไม่เข้า DB ด้วยครับ จะเข้าถ้าเลือกcheckbox row 1,2 อะครับ
พอผมลอง comment tr.Rollback(); ก็ไม่ติด error แต่เข้า DB ได้แค่ 2 row มากกว่านั้นไม่เข้าเลยครับ
ประวัติการแก้ไข 2012-12-03 11:29:30 2012-12-03 11:29:51 2012-12-03 11:46:23 2012-12-03 11:46:31 2012-12-03 11:46:45
Date :
2012-12-03 11:29:02
By :
SponG_Gy
ผมแก้ได้แล้วโดยใส่ trim เข้าไปครับ
Code (C#)
int rowCount = GridView1.Rows.Count; // นับ Row ใน GridView
for (int j = 0; j < rowCount; j++)
{
GridViewRow row = GridView1.Rows[j];
CheckBox cbselect = (CheckBox)row.FindControl("cbselect");
string lblMasterID = row.Cells[1].Text.Trim();
string lblusername = row.Cells[2].Text.Trim();
string lblpassword = row.Cells[3].Text.Trim();
string lblfname = row.Cells[4].Text.Trim();
string lbllname = row.Cells[5].Text.Trim();
if (cbselect.Checked == true) // check แถวที่ select
{
//ส่วนการ Insert เข้า DB
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " + " values ('" + lblMasterID + "','" + lblusername + "','" + lblpassword + "','" + lblfname + "','" + lbllname + "')";
}
cmd.ExecuteNonQuery();
}
tr.Commit();
Label2.Text = "บันทึกข้อมูลเรียบร้อย";
}
แต่ยังติดอยู่ที่เวลาเข้าข้อมูล ถ้าเลือกเข้าทุกแถวเข้าได้ครับ แต่ถ้าเลือกบางแถวหรือแถวเดียว การเข้าข้อมูลจะผิดพลาดตามภาพเลยครับ
รบกวนช่วยหน่อยนะครับ ผมพยายามแก้ก็ยังงงอยู่ดีครับ ขอบคุณมากครับ
Date :
2012-12-03 14:09:13
By :
SponG_Gy
เอ... ผมลองก็ได้ปกตินะครับ
ลองแบบนี้ได้ไหมครับ
Code (C#)
if (cbselect.Checked == true) // check แถวที่ select
{
//ส่วนการ Insert เข้า DB
cmd.CommandText = "Insert Into Sheet1(MasterID,username,password,fname,lname) " + " values ('" + lblMasterID + "','" + lblusername + "','" + lblpassword + "','" + lblfname + "','" + lbllname + "')";
cmd.ExecuteNonQuery();
}
Date :
2012-12-03 14:52:22
By :
Niratiam
โอ้ว ขอบคุณมากมากครับคุณ Niratiam ได้แล้วครับ วาง Query ผิดตำแหน่งนี่เอง มันเลยวนลูบแล้ว Query ผมไม่รอบครอบเอง ขอบคุณนะครับ ขอบคุณมากมากครับที่ให้คำแนะนำมาโดยตลอด
Date :
2012-12-03 15:11:51
By :
SponG_Gy
ยินดีครับ
Date :
2012-12-03 15:16:58
By :
Niratiam
ดีใจด้วยครับ
Date :
2012-12-03 22:31:52
By :
mr.win
Load balance : Server 05