ورود

View Full Version : سوال: دسترسی به مقدار متغیر های تعریف شده در foreach



zareei_ta
سه شنبه 22 آذر 1390, 16:31 عصر
من در حلقه foreach متغیری را تعریف کردم.اما نمیتونم در جای دیگر برنامه ازش استفاده کنم برای این کار باید چکار کرد. کد زیر برای دسترسی به مقدار لیبل ها در گرید است. و در جای دیگه میخوام مقدار اونها را در دیتا بیس ذخیره کنم


foreach (GridViewRow r in GridView1.Rows)
{
Label lblSoftName = (Label)r.Cells[0].FindControl("lblSoftName");
Label lblSoftPrice = (Label)r.Cells[0].FindControl("lblTotalPrice");
Label lblSoftId = (Label)r.Cells[0].FindControl("lblSoftId");
}

hamid_shrk
سه شنبه 22 آذر 1390, 16:35 عصر
متغیرتون رو قبل از page load بزارید تا جاهای دیگه هم بشناسدش و اگر هم میخواید مقدار آخر توش بمونه متغیر رو از نوع static تعریف کنید.

zareei_ta
چهارشنبه 23 آذر 1390, 10:16 صبح
ممنون جوابتون کمک کرد .حالا یه مشکلی دارم اینکه میخوام مقادیر توی گرید را ذخیره کنم و ممکنه چند تا سطر در گرید باشه چطوری این دستور insert را بنویسم .کد زیر که نوشتم تنها رکورد اخری را در گرید ذخیره میکنه؟

public static Label lblSoftName;
//public static Label lblSoftPrice;
public static Label lblSoftId;


protected void Page_Load(object sender, EventArgs e)
{
this.Title = "برگشت از بانک";
string invoiceNumber = Page.Request.QueryString["iN"]; // شماره فاکتور
string invoiceDate = Page.Request.QueryString["iD"].Substring(0,10); // تاریخ فاکتور
string TransactionReferenceID = Page.Request.QueryString["tref"]; // شماره مرجع
string XMLResult;
string UserId= Session["ID"].ToString();
string Email = Session["Email"].ToString();

XMLResult = ReadPaymentResult();
lblInvNumber.Text = invoiceNumber;
string Date = invoiceDate;
lblInvDate.Text = convert_date();
lblRefNumber.Text = TransactionReferenceID;
lblUserId.Text = UserId;
lblEmail.Text = Email;

GridView1.DataSource = ShoppingCart.MyShopCart.Items;
GridView1.DataBind();

foreach (GridViewRow r in GridView1.Rows)
{
lblSoftName = (Label)r.Cells[0].FindControl("lblSoftName");
//lblSoftPrice = (Label)r.Cells[0].FindControl("lblTotalPrice");
lblSoftId = (Label)r.Cells[0].FindControl("lblSoftId");
}
Xml1.DocumentContent = XMLResult;

if (XMLResult == "")
{
Response.Write("تراکنش انجام نشد ");
}
else
{
XmlDocument XD = new XmlDocument();
XD.LoadXml(XMLResult);
XmlNodeList _TXNResult = XD.GetElementsByTagName("result"); //نتیجه تراکنش
XmlNodeList _TXNtraceNumber = XD.GetElementsByTagName("traceNumber"); //شماره پیگیری
XmlNodeList _TXNreferenceNumber = XD.GetElementsByTagName("referenceNumber"); //شماره ارجاع
Label4.Text = _TXNResult[0].InnerText;
string Result = _TXNResult[0].InnerText;
}

cn.ConnectionString = StrConnection;
cmd.CommandType = CommandType.Text;
cmd.Connection = cn;
cmd.CommandText = "insert into Sells(InvoiceNumber,InvoiceDate,TransactionId,User Id,SoftwareId) values(N'" + lblInvNumber.Text.Trim() + "',N'" + lblInvDate.Text.Trim() + "',N'" + lblRefNumber.Text.Trim() + "',N'" + lblUserId.Text.Trim() + "',N'" + lblSoftId.Text.Trim() + "'),";
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
{


من کد زیر را برای اینکه اطلاعات گرید را در دیتابیس ذخیره کنم نوشتم .اما اطلاعات را تکراری درج میکنه مثلا اگر گریدم 2 تا سطر داشته باشه 4 سطر را ذخیره میکنه هر سطر را دوبار .ممکنه مشکل کدم را بگین
foreach (GridViewRow r in GridView1.Rows)
{
lblSoftName = (Label)r.Cells[0].FindControl("lblSoftName");
//lblSoftPrice = (Label)r.Cells[0].FindControl("lblTotalPrice");
lblSoftId = (Label)r.Cells[0].FindControl("lblSoftId");
for (int i = 0; i < GridView1.Rows.Count; i++)
{
cn.ConnectionString = StrConnection;
cmd.CommandType = CommandType.Text;
cmd.Connection = cn;
cmd.CommandText = "insert into Sells(InvoiceNumber,InvoiceDate,TransactionId,User Id,SoftwareId) values(N'" + lblInvNumber.Text.Trim() + "',N'" + lblInvDate.Text.Trim() + "',N'" + lblRefNumber.Text.Trim() + "',N'" + lblUserId.Text.Trim() + "',N'" + lblSoftId.Text.Trim() + "')";
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}

}