PDA

View Full Version : مشکل در ثبت اطلاعات .... .



omid6630
چهارشنبه 05 مرداد 1390, 12:19 عصر
بسم الله و سلام وخسته نباشید
یک برنامه خیلی ساده ذخیره سازی یک سری اطلاعات .
اما وقتی که میخوام کالایی رو ثبت کنم ، خانواده کالا و شرکت سازنده ی کالا که بصورت لیست کشویی هستن DropDownlist ثبت نمیشوند ، یعنی فقط اولین گزینه از انها ثبت میشوند .
یکی از دوستان گفته بودند که باید در Page Load از متد !IsPostBack استفاده کنید ، این کار را هم انجام دادم ، اما مشکل صفحه بندی پیش آمد و فقط صفحه ی 1 نمایش داده میشد .

72967






protected void Page_Load(object sender, EventArgs e)

{

if (Page.User.Identity.IsAuthenticated)

{

if (Roles.IsUserInRole("Admin"))

{

// gridGoods.SelectedIndex = -1;

bindgrid();

}

}

}






public void bindgrid()

{

string select = "select Goods.ID,Name,Model,Cost,Count,Date,Details,Garant i,Pic,grpname,cmpname from Goods inner join Team on Goods.FamilyID=Team.ID inner join Company on Goods.CompanyID=Company.ID ";

string selectgroup = "select * from Team";

string selectcompany = "select * from Company";

string summselect = "select * from Summary";

DataSet dssummary = sqlh.ExecuteDataSet(summselect);

DataSet dsgroup = sqlh.ExecuteDataSet(selectgroup);

DataSet dscompany = sqlh.ExecuteDataSet(selectcompany);

DataSet ds = sqlh.ExecuteDataSet(select);

gridsummary.DataSource = dssummary.Tables[0].DefaultView;

gridsummary.DataBind();

drpGroup.DataSource = dsgroup.Tables[0].DefaultView;

drpGroup.DataValueField = "ID";

drpGroup.DataTextField = "grpname";

drpGroup.DataBind();

drpCompany.DataSource = dscompany.Tables[0].DefaultView;

drpCompany.DataValueField = "ID";

drpCompany.DataTextField = "cmpName";

drpCompany.DataBind();

gridGoods.DataSource = ds.Tables[0].DefaultView;

gridGoods.DataBind();

}







protected void btnSave_Click(object sender, EventArgs e)

{

try

{

SqlConnection cnn = new SqlConnection(SqlHelper.strConnectionString);

string SPInsert = "insert into Goods(Name,FamilyID,CompanyID,Model,Cost,Count,Det ails,Garanti,pic) values(@Name,@FamilyID,@CompanyID,@Model,@Cost,@Co unt,@Details,@Garanti,@pic)";

SqlCommand cmd = new SqlCommand(SPInsert, cnn);

cmd.Parameters.AddWithValue("@Name", txtName.Text);

cmd.Parameters.AddWithValue("@FamilyID", drpGroup.SelectedValue);

cmd.Parameters.AddWithValue("@CompanyID", drpCompany.SelectedItem.Value);

cmd.Parameters.AddWithValue("@Model", txtModel.Text);

cmd.Parameters.AddWithValue("@Cost", txtCost.Text);

cmd.Parameters.AddWithValue("@Count", txtCount.Text);

cmd.Parameters.AddWithValue("@Details", txtDetails.Text);

cmd.Parameters.AddWithValue("@Garanti", txtGaranti.Text);

cmd.Parameters.AddWithValue("@pic", fileName);

cnn.Open();

cmd.ExecuteNonQuery();

cnn.Close();

bindgrid();

}

catch (Exception ex)

{

Response.Write("<script>alert('لطفااطلاعاتراصحیحوارد نید ')</script>");

}

}

Saman Hashemi
چهارشنبه 05 مرداد 1390, 12:36 عصر
حرف دوستت درست بوده بايد همين كارو بكني...!
اگه منظورت از صفحه اول،گريده اين كد اضافه كن
protected void GridViewEditAccess_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

GridViewEditAccess.PageIndex = e.NewPageIndex;
GridViewEditAccess.DataBind();
}

omid6630
چهارشنبه 05 مرداد 1390, 13:30 عصر
حرف دوستت درست بوده بايد همين كارو بكني...!
اگه منظورت از صفحه اول،گريده اين كد اضافه كن
protected void GridViewEditAccess_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

GridViewEditAccess.PageIndex = e.NewPageIndex;
GridViewEditAccess.DataBind();
}

این کد رو هم اضافه کرده بودم ، اما مشکل صفحه بندی کردن حل نشد !!

Saman Hashemi
چهارشنبه 05 مرداد 1390, 13:41 عصر
خوب چه اروري ميده ميشه بگي؟

omid6630
چهارشنبه 05 مرداد 1390, 14:13 عصر
error نداره ، به غیر از صفحه اول بقیه ، داخلشون اطلاعات ندارن ! خالی نمایش میده .

mehran_sh_t
چهارشنبه 05 مرداد 1390, 14:27 عصر
سلام
باید برای اون دو تا DropDownList عبارت IsPostBack رو چک کنی، وگرنه از اول Bind میشن و مقدار index اولیشون قرار می گیره.

Saman Hashemi
چهارشنبه 05 مرداد 1390, 14:37 عصر
يعني اطلاعات بايد توي صفحات ديگه وجود داشته باشه نيست؟توي Change index عبارت grid.databind نوشتي؟يه بار ديگه كدتو بعد از اصلاح ميزاري ببينم؟

omid6630
چهارشنبه 05 مرداد 1390, 14:44 عصر
protected void gridGoods_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridGoods.PageIndex = e.NewPageIndex;
gridGoods.DataBind();
}

Saman Hashemi
چهارشنبه 05 مرداد 1390, 14:57 عصر
كدهاي لود صفحه يادت رفت بذاري...!

omid6630
چهارشنبه 05 مرداد 1390, 15:04 عصر
protected void Page_Load(object sender, EventArgs e)
{

if (Page.User.Identity.IsAuthenticated)
{
if (Roles.IsUserInRole("Admin"))
{
// gridGoods.SelectedIndex = -1;
bindgrid();
}
else
{
Response.Write("<script>alert('نام کاربری یا رمز ورود نادرست است ')<script>");
Response.Redirect("~/Login.aspx?role=Deny");
}
}
else
{
Response.Write("<script>alert('نام کاربری یا رمز ورود نادرست است ')<script>");
Response.Redirect("~/Login.aspx?Stause=false");
}

}



-------------------------

public void bindgrid()
{

gridGoods.Columns[0].HeaderStyle.Height = 10;
string select = "select Goods.ID,Name,Model,Cost,Count,Date,Details,Garant i,Pic,grpname,cmpname from Goods inner join Team on Goods.FamilyID=Team.ID inner join Company on Goods.CompanyID=Company.ID ";
string selectgroup = "select * from Team";
string selectcompany = "select * from Company";
string summselect = "select * from Summary";

DataSet dssummary = sqlh.ExecuteDataSet(summselect);
DataSet dsgroup = sqlh.ExecuteDataSet(selectgroup);
DataSet dscompany = sqlh.ExecuteDataSet(selectcompany);
DataSet ds = sqlh.ExecuteDataSet(select);

gridsummary.DataSource = dssummary.Tables[0].DefaultView;
gridsummary.DataBind();

drpGroup.DataSource = dsgroup.Tables[0].DefaultView;
drpGroup.DataValueField = "ID";
drpGroup.DataTextField = "grpname";
drpGroup.DataBind();

drpCompany.DataSource = dscompany.Tables[0].DefaultView;
drpCompany.DataValueField = "ID";
drpCompany.DataTextField = "cmpName";
drpCompany.DataBind();

gridGoods.DataSource = ds.Tables[0].DefaultView;
gridGoods.DataBind();



}


protected void gridGoods_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "remove")
{
int id = Convert.ToInt32(e.CommandArgument);
SqlConnection cnn = new SqlConnection(SqlHelper.strConnectionString);
string del = "delete from Goods where id=@id";
SqlCommand cmd = new SqlCommand(del, cnn);
cmd.Parameters.AddWithValue("@id", id);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
bindgrid();
}

if (e.CommandName == "chenge")
{
int id = Convert.ToInt32(e.CommandArgument);
SqlConnection cnn = new SqlConnection(SqlHelper.strConnectionString);
string selectall = "select * from Goods where id=@id";
SqlCommand cmd = new SqlCommand(selectall, cnn);
cmd.Parameters.AddWithValue("@id", id);
cnn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
txtName.Text = sdr["Name"].ToString();
drpGroup.Text = sdr["FamilyID"].ToString();
drpCompany.Text = sdr["CompanyID"].ToString();
txtModel.Text = sdr["Model"].ToString();
txtCost.Text = sdr["Cost"].ToString();
txtCount.Text = sdr["Count"].ToString();
txtDetails.Text = sdr["Details"].ToString();
txtGaranti.Text = sdr["Garanti"].ToString();

sdr.Close();
cnn.Close();
ViewState["ID"] = id;
bindgrid();
}
}

protected void gridGoods_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridGoods.PageIndex = e.NewPageIndex;
gridGoods.DataBind();
}

Saman Hashemi
چهارشنبه 05 مرداد 1390, 15:22 عصر
if (Roles.IsUserInRole("Admin"))
{
// gridGoods.SelectedIndex = -1;
if (!IsPostBack)
{
bindgrid();
}
}
اين كار انجام بده ببين درست ميشه...!

omid6630
چهارشنبه 05 مرداد 1390, 15:42 عصر
نشد ، دوستان اگر کسی اطلاعی داره اعلام کنه ، مسئولین تالار !

Saman Hashemi
چهارشنبه 05 مرداد 1390, 16:02 عصر
protected void gridGoods_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
bindgrid();
gridGoods.PageIndex = e.NewPageIndex;
gridGoods.DataBind();
}
اين كد اينجوري كن ايشالا درست ميشه...!

Himalaya
چهارشنبه 05 مرداد 1390, 16:05 عصر
سلام.
کدای پست 10 رو تازه دیدم
اینکه چرا همیشه گزینه اول از دراپ ها تو db سیو میشه >>
اول اینکه تو متد gridbind هم گرید ها رو بایند کردید و هم دراپ ها رو. هر کدومو تو یه متد بنویسید. جایی که گرید بایند میشه (تو کداتون زیاد اتفاق میافته) لازم نیست دراپ ها هم بایند بشن (در غیر این صورت مثلا اگه شما گزینه سوم از یه دراپ رو انتخاب کنید، بعد از اینکه bindgrid رو صدا کردید، چون دراپ ها هم دارن بایند میشن، پس گزینه اول مجددا انتخاب میشه)
دوم اینکه وقتی شما دکمه سیو رو میزنید اول کدای Page_Load صفحه اجرا میشن و بعد کدای دکمه. و چون تو Page_Load از IsPostBack استفاده نکردید و gridbind رو صدا کردید، پس قبل از سیو، دراپها مجددا بایند میشن و گزینه اول انتخاب میشه و بعد کدای دکمه سیو اجرا میشه
اما اینکه چرا صفحه بندی گرید کار نمیکنه. شما گفتید

gridGoods.PageIndex = e.NewPageIndex;
gridGoods.DataBind();

gridGoods.DataBind اینجا معنی نداره. مگه شما از SqlDataSource یا AccessDataSource یا دیتاسورس های این مدلی برای گرید استفاده کردید که یه ضرب نوشتید gridGoods.DataBind. به جای این خط باید کدایی که واسه این گرید تو تابع gridbind نوشتید رو مجددا اجرا کنید تا گریدتون بایند بشه. کلا یعنی اینکه کدات رو تو
مایه های کدای پایین بنویس


protected void Page_Load(object sender, EventArgs e)
{

if (Page.User.Identity.IsAuthenticated)
{
if (Roles.IsUserInRole("Admin"))
{
if (!Page.IsPostBack)
{
bindgrid();
BindDrop();
}
}
else
{
Response.Write("<script>alert('نام کاربری یا رمز ورود نادرست است ')<script>");
Response.Redirect("~/Login.aspx?role=Deny");
}
}
else
{
Response.Write("<script>alert('نام کاربری یا رمز ورود نادرست است ')<script>");
Response.Redirect("~/Login.aspx?Stause=false");
}
}


private void bindgrid()
{
gridGoods.Columns[0].HeaderStyle.Height = 10;
string summselect = "select * from Summary";
DataSet dssummary = sqlh.ExecuteDataSet(summselect);
gridsummary.DataSource = dssummary.Tables[0].DefaultView;
gridsummary.DataBind();

string select = "select Goods.ID,Name,Model,Cost,Count,Date,Details,Garant i,Pic,grpname,cmpname from Goods inner join Team on Goods.FamilyID=Team.ID inner join Company on Goods.CompanyID=Company.ID ";
DataSet ds = sqlh.ExecuteDataSet(select);
gridGoods.DataSource = ds.Tables[0].DefaultView;
gridGoods.DataBind();
}

private void BindDrop()
{
string selectgroup = "select * from Team";
DataSet dsgroup = sqlh.ExecuteDataSet(selectgroup);
drpGroup.DataSource = dsgroup.Tables[0].DefaultView;
drpGroup.DataValueField = "ID";
drpGroup.DataTextField = "grpname";
drpGroup.DataBind();

string selectcompany = "select * from Company";
DataSet dscompany = sqlh.ExecuteDataSet(selectcompany);
drpCompany.DataSource = dscompany.Tables[0].DefaultView;
drpCompany.DataValueField = "ID";
drpCompany.DataTextField = "cmpName";
drpCompany.DataBind();
}


protected void gridGoods_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridGoods.PageIndex = e.NewPageIndex;
bindgrid();
}

Refactor و رعایت کردن قواعد نامگذاری و کنترل خطا و ... رو هم که کلا بیخیال شدی

omid6630
چهارشنبه 05 مرداد 1390, 17:02 عصر
72979

http://up.iranblog.com/images/qfy008a9un4zais4ok2.zip

ببخشید سرعت اینترنت ما خرابه

Himalaya
چهارشنبه 05 مرداد 1390, 17:22 عصر
کداتو دیدم. جواب همونی بود که تو پست قبلم گفتم

omid6630
چهارشنبه 05 مرداد 1390, 17:40 عصر
آقا خدا شما رو خیر بده ، ان شالله در زندگی تون هیچ وقت ناراحتی نبینید !!!! واقعا متشکرم . درست شد !


در ادامه ی تکمیل این پروژه .

1- برای عوض کردن Header Text های GridView این کد رو اضافه کردم . مثلا :


gridGoods.Columns[4].HeaderText = "توضیحات ";


اما خطای :
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index



2- سوال بعدی اینکه می خوام فیلد Pic که در Gridview نباشه . در صورتی که گویا برای ذخیره کردن و به روز رسانی اطلاعات باید باشد . البته برای همورد هم کد ؛


gridGoods.Columns[4].Visible = false;

اضافه کردم که با ز هم هون خطا رو داد .

باز هم متشکرم

omid6630
چهارشنبه 05 مرداد 1390, 18:53 عصر
آقا خدا شما رو خیر بده ، ان شالله در زندگی تون هیچ وقت ناراحتی نبینید !!!! واقعا متشکرم . درست شد !


در ادامه ی تکمیل این پروژه .

1- برای عوض کردن Header Text های GridView این کد رو اضافه کردم . مثلا :


gridGoods.Columns[4].HeaderText = "توضیحات ";


اما خطای :
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index



2- سوال بعدی اینکه می خوام فیلد Pic که در Gridview نباشه . در صورتی که گویا برای ذخیره کردن و به روز رسانی اطلاعات باید باشد . البته برای همورد هم کد ؛


gridGoods.Columns[4].Visible = false;

اضافه کردم که با ز هم هون خطا رو داد .

باز هم متشکرم

جناب
karaji333 (http://barnamenevis.org/member.php?53563-karaji333)
http://barnamenevis.org/images/statusicon/user-online.png

منتظر جواب شما و دیگر دوستان هستیم

Himalaya
چهارشنبه 05 مرداد 1390, 18:59 عصر
برای عوض کردن Header Text های GridView این کد رو اضافه کردم . مثلا ...
بعد از اینکه این گرید بایند شد این کد رو بنویس. (حتما میدونی اندیس ستونها از 0 شروع میشه)

سوال بعدی اینکه می خوام فیلد Pic که در Gridview نباشه . در صورتی که گویا برای ذخیره کردن و به روز رسانی اطلاعات باید باشد
نه برای ذخیره به ستون Pic نیاز داری و نه برای Update (منظورم اون ستونی هست که داره اسم فایل رو نشون میده و نه تصویر). موقع Insert که داری از FileUploader مقدار میخونی، موقع ,Update هم که دستور کامل Update رو مینویسی و اگه FileUploader فایل نداشت، اون دستور رو تغییر میدی و ستون Pic رو ازش کم میکنی
ستون Pic نشون داده میشه چون خصوصیت AutoGnareteClumns گرید برابر با True هستش. اونو False کن و بقیه ستونهات رو هم به صورت BoundField یا TemplateField تو گرید تعریف کن (با توجه به ستونهایی که تو کد Select کردی). یعنی علاوه بر اون 3 تا ستونی که به صورت ItemTemplate تعریف کردی (تو پروژه ای که Up کردی منظورمه)، بقیه ستونهایی رو که میخوای نمایش داده بشن رو تو گرید به این صورت تعریف کن


<Columns>
<asp:BoundField DataField="Name" HeaderText="نام" />
<!--OR-->
<asp:TemplateField HeaderText="نام">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>

omid6630
شنبه 08 مرداد 1390, 15:31 عصر
وقتی که کاربر اطلاعات را اشتباه وارد میکند ، پیغامی میدهد ، که داده ها اشتباه است و لطفا صحیح وارد کنید .

در این صورت فونت صفحه 3 شماره بزرگ شده و صفحه رو خراب میکنه !

راهنمایی کنید ، لطفا .

Saman Hashemi
شنبه 08 مرداد 1390, 15:49 عصر
ارور اينجا قرار بده تا دوستان بهتر كمكت كنند...!

omid6630
شنبه 08 مرداد 1390, 17:28 عصر
ارور اينجا قرار بده تا دوستان بهتر كمكت كنند...!


خطایی نمیده ! صفحه refresh میشه یک دفعه فونت ها بزرگتر میشود .

کدی برای ورود اطلاعات غلط گذاشتم ، اینه .




try
{
اگر درست بود
}
catch (Exception ex)
{
Response.Write("<script>alert('لطفا اطلاعات را صحیح وارد کنید ')</script>");
}

Himalaya
یک شنبه 09 مرداد 1390, 09:52 صبح
سلام
به جای response.write از کد زیر استفاده کن

if (!ClientScript.IsStartupScriptRegistered("Message"))
ClientScript.RegisterStartupScript(this.GetType(), "Message", "alert('لطفا اطلاعات را صحیح وارد کنید ');", true);

omid6630
چهارشنبه 12 مرداد 1390, 00:23 صبح
با عرض سلام و تشکر.

در یک فرم یک Checkboxlist وجود دارد که یک سری اطلاعات دارد . میخوام وقتی که روی دکمه ی ذخیره ی اطلاعات کلیلک شد ، گذینه های انتخابی از Checkboxlist رو تویکی از خونه های یک گریدویو نمایش بدم . که این کار اتفاق نمی افته . خطایی هم میده .

کد ها رو گذاشتم .

فکر کنم مشکل از if (!IsPostBack) باشه . ولی دوستان باز هم نظرشان را بیان کنند .


protected void Page_Load(object sender, EventArgs e)
{

if (Page.User.Identity.IsAuthenticated)
{
if (Roles.IsUserInRole("Admin"))
{


loginID = 0;
bindgrid();
binddrop();


}
else if (Roles.IsUserInRole("D"))
{


loginID = 1;
bindgrid();
binddrop();

}


else if (Roles.IsUserInRole("A"))
{

loginID = 2;
bindgrid();
binddrop();
}

else if (Roles.IsUserInRole("B"))
{

loginID = 3;
bindgrid();
binddrop();
}

else if (Roles.IsUserInRole("C"))
{

loginID = 4;
bindgrid();
binddrop();
}
}

}



protected void btnAtSave_Click(object sender, EventArgs e)
{
Label1.Text = String.Empty;

foreach (ListItem listItem in (chkLstPerson.Items))
{
if (listItem.Selected)
{
Label1.Text += listItem.Text + "-";
}
}

SqlConnection cnn = new SqlConnection(SqlHelper.strConnectionString);
string attinsert = "insert into ...";
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue();

cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();

bindgrid();
binddrop();
}

Saman Hashemi
چهارشنبه 12 مرداد 1390, 08:31 صبح
خطاش چيه؟كجاي كدت داري به گريد اضافه ميكني؟:متفکر:

omid6630
چهارشنبه 12 مرداد 1390, 16:04 عصر
جناب
Saman Hashemi (http://barnamenevis.org/member.php?160262-Saman-Hashemi)
http://barnamenevis.org/images/statusicon/user-online.png
متشکرم از پاسخ تان .

میتونید راهنمایی کنید که !IsPostback رو چطوری باید در فرم لود استفاده کنم . با توجه به اینکه چند تا مدیر داریم .

در عین حال ؛

public void bindgrid()
{

string ProgSelect = "select... where .. ='" + loginID + "'";
DataSet dsprog = sqlh.ExecuteDataSet(ProgSelect);
gridProg.DataSource = dsprog.Tables[0].DefaultView;
gridProg.DataBind();

string AttSelect = "select. . . where...='" + loginID + "'";
DataSet dsatt = sqlh.ExecuteDataSet(AttSelect);
gridAtt.DataSource = dsatt.Tables[0].DefaultView;
gridAtt.DataBind();

}

Saman Hashemi
چهارشنبه 12 مرداد 1390, 20:58 عصر
ispostback اینجا زیاد اهمیت نداره کدتو بصورت زیر برای تمام if هات اصلاح کن...!
if(Roles.IsUserInRole("Admin")==true)

omid6630
پنج شنبه 13 مرداد 1390, 11:46 صبح
انجام دادم ، نشد .!

Saman Hashemi
پنج شنبه 13 مرداد 1390, 12:20 عصر
درون هر if
if (!IsPostBack)
{
loginID = 0;
bindgrid();
binddrop();
}

omid6630
پنج شنبه 13 مرداد 1390, 13:41 عصر
این رو هم انجام دادم ، نشد .!

omid6630
جمعه 14 مرداد 1390, 00:59 صبح
لطفا مسئولین و دوستان کمک کنند ؟!!!

نکته ی دیگه این که ، حس میکنم ، asp.net خیلی داره ما رو از وب دور میکنه ! میخوام برم به سمت Ajax یا MVC .

لطفا در این باره هم راهنمایی کند .!

متشکرم .