PDA

View Full Version : مشکل آیدنتیتی بودن و حذف سطور



faramarz_s
دوشنبه 15 دی 1382, 13:37 عصر
*کدی که برای حذف اطلاعات یک سطر از دیتا بیس اسکیوئل سرور 2000 استفاده می کنم بصورت زیر است. در ضمن نوع داده ردیف
را آیدنتیتی قرار دادم.
حالا اگر از 5 تا سطری که داریم سومی را حذف کنیم عدد 3 از سطر کاملا پاک شده و چون آیدنتیتی است ازعدد 6 سطر جدید را ایجاد می کند و ...خب مشخصه که نمایش داده ها به این شکل خیلی زشت است که ردیف 3 نداشته باشیم!
نمونه :


try
{
string strCon = ConfigurationSettings.AppSettings["ConnStr"];
SqlConnection conn = new SqlConnection(strCon);

String strCmd = "DELETE FROM tblUser "+
" WHERE row=@Id1";

SqlCommand cmd = new SqlCommand(strCmd, conn);


cmd.Parameters.Add(new SqlParameter("@Id1",
SqlDbType.Int, 4));
// Initialize the SqlCommand "@Id1" parameter to the ID of the row
// that was clicked.
cmd.Parameters["@Id1"].Value =
DataGrid1.DataKeys[(int)e.Item.ItemIndex];

conn.Open();

cmd.ExecuteNonQuery();
conn.Close();

// Reset the edit mode for the current item
DataGrid1.EditItemIndex = -1;

// create data source again.........
bindToUser();
}
catch(Exception e2)
{
Label1.Text=e2.Message.ToString();
}
}

به نظر شما برای اینکه شماره ها ترتیب عددی اشان را حفظ کرده در عین حال مرتب بوده و در ضمن در دیتا گرید مشکلی برای حذف آنها نباشد چکار باید کرد.
لازم به تذکر است که ما برای افزودن کاربران جدید نیاز به حالت آتو نامبرینگ داریم و غیر قابل اجتناب می باشد.
http://www.merat.org/Id01.jpg

Mahdavi
دوشنبه 15 دی 1382, 13:57 عصر
دوست عزیز آیا اجباری هست که کدی که در row نشان میدهید سریال کاربر باشد ؟
در ضمن درست نیست که با حذف شدن یک کاربر سریال کاربرهای دیگر شیفت بخورند !!!
اگه فقط شما یه شمارنده واسه تعداد سطرها میخواید بگید تا کدشو بدم .
موفق باشید

faramarz_s
دوشنبه 15 دی 1382, 14:54 عصر
آیا اجباری هست که کدی که در row نشان میدهید سریال کاربر باشد ؟
1-ممکنه در این مورد بیشتر توضیح بدهید.چون اگر به کدی که برای حذف هر سطر در بنامه ASP.NETنوشته توجه کنید متوجه نیاز استففاده از ROWمی شوید.
2-البته که می خواهم. لطف بفرمایید.
faramarz_s@hotmail.com

Mahdavi
دوشنبه 15 دی 1382, 23:55 عصر
با سلام
بازم نیازی به نمایش نیست. میتونی visable اونو false کنی. ازش استفاده کن ولی نمایش نده.
واسه شمارنده هم :


-1 ابتدا کد زیر رو به کلاست اضافه کن :


private int Count=0;
public string Counter()
{
++Count;

return Count.ToString();
}


2- یه ستون از datagrid تو tempelet column کنی
3- یه Label بزاری
4-تو databinding تو خاصیت text گزینه Custom رو انتخاب کن و بنویس

Counter()و تمام

faramarz_s
سه شنبه 16 دی 1382, 15:39 عصر
1-ویزیبل یک سطر از دیتا گرید را چگونه باید فالس کنم؟
2-تشکر از کانتر خیلی خوبه :wink:

Mahdavi
سه شنبه 16 دی 1382, 18:34 عصر
این رو قبلا تو همین قسمت جواب دادم
یه نگاه میکردی پیدا میکردی

http://www.barnamenevis.org/forum/viewtopic.php?t=5820

faramarz_s
پنج شنبه 25 دی 1382, 20:05 عصر
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Source Error:


Line 40: {
Line 41: bindToUser();
Line 42: DataGrid1.Columns[1].Visible=false;
Line 43: }
Line 44:

:cry:

Vahid_Nasiri
جمعه 26 دی 1382, 10:45 صبح
برای اینکه ویزیبل یک ستون نه سطر را فالس کرد فقط کافی است هنگامیکه که می خواهید کوئری بگیرید نام این فیلد را نیاورید
بنابراین بجای استفاده از :
select * from myTable
بهتر است کمی حوصله بخرج دهید و بنویسید:
select f1,f2,f5 from myTable

موفق باشید

faramarz_s
جمعه 26 دی 1382, 12:19 عصر
البته و صد البته و بنده هم این را امتحان کرده بودم برای همین روال را دوباره اجرا کردم تا به شما هم نشان دهم:

void bindToUser()
{
string strCon = ConfigurationSettings.AppSettings["ConnStr"];
SqlConnection wg = new SqlConnection(strCon);

SqlDataAdapter dtAdap = new
SqlDataAdapter("select username,email,Roles from tblUser",wg);

DataSet dsetSales = new DataSet();
dtAdap.Fill(dsetSales, "tblUser");

DataGrid1.DataSource = dsetSales.Tables["tblUser"].DefaultView;
DataGrid1.DataBind();

}

Server Error in '/edu/nahie' Application.
--------------------------------------------------------------------------------

DataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name row.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: DataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name row.

Source Error:


Line 80:
Line 81: DataGrid1.DataSource = dsetSales.Tables["tblUser"].DefaultView;
Line 82: DataGrid1.DataBind();
Line 83:
Line 84: }

Vahid_Nasiri
جمعه 26 دی 1382, 12:42 عصر
کد فوق از DataBinder.Eval شما ایراد گرفته و نه چیز دیگری.
وقتی بایند می کنید عبارت اس کیوال شما باید حاوی فیلدی که در DataBinder.Eval هم می خواهید استفاده کنید ، باشد.

faramarz_s
جمعه 26 دی 1382, 13:07 عصر
استاد عزیز مشکل همین جاست که ما>>>>>>>

DataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name row.


does not contain a property with the name row
همین فیلد row را نمی خواهیم نشان دهیم :wink:
همین row را می خواهم ناپدید کنم!!!! :lol:

Vahid_Nasiri
جمعه 26 دی 1382, 21:20 عصر
شما بهتر است در این حالت تمام ستون ها را به صورت template تعریف کنید و سپس AutoGenerateColumns‌ آنرا false کنید.
در ضمن کمی فکر کردن و کمی مطالعه بجای خندیدن توصیه می شود.