PDA

View Full Version : سوال: ثبت تمامی نمرات با یک کلیک



fakhravari
یک شنبه 04 دی 1390, 17:49 عصر
با سلام
دوستان یه روشی که در دانشگاه ها که استاد نمرات رو ثبت میکنه به این شکل است که
کل اسامی در یک گرید نمایش میده و یک textbox برای هر کدوم از دانشجو ها فعال است که استاد جلو هر دانشجو نمره را وارد میکنه و بعد از پر کردن تمامی نمرات ثبت اطلاعات میزنه.
دوستان این روش به چه شکل کار میکنه:متفکر:

alonemm
یک شنبه 04 دی 1390, 18:15 عصر
باسلام:
به مثال زیر توجه کنید:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" ...>
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SomeColumn") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="SomeOtherColumn" HeaderText="Foo" />
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Update" OnClick="Button1_Click" />




protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
TextBox txt = row.FindControl("TextBox1") as TextBox;
if (txt != null)
{
//get the value from the textbox
string value = txt.Text;
}
}
}


خب شما میتونید تمامی اطلاعات دانشجو ها رو در گرید نمایش بدید.
بعد از وارد کردن نمره و ارسال هم با همین حلقه تکرار مقدار نمره و ID هر ردیف رو دربیارید و عملیات بروز رسانی در جدول نمرات پایگاه داده رو انجام بدید.


موفق باشید.

ehsan2007
سه شنبه 06 دی 1390, 21:28 عصر
به این آدرس برو ببین همینطوری کارتو راه میندازه اگه خواستی بگو کدشو واست توضیح بدم
www.emadrese.ir (http://www.emadrese.ir)
قسمت مدارس راهنمایی> کاربر مدیر مدرسه
نام کاربری :987654321
کلمه عبور : 123456
بعد از وارد شدن به منوی
نمرات > ماهانه > بر حسب کلاس
برو
بعد سال تحصیلی / پایه / شعبه کلاس
ماه : آبان
و یکی از درسارو انتخاب کن در آخر هم نمایشو بزن
ببین ثبت نمراتش با آجاکسه

fakhravari
یک شنبه 11 دی 1390, 12:49 عصر
با سلام
دوستان اینم کدش
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="id" DataSourceID="SqlDataSource1" ShowHeader="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>

Name : <asp:Label ID="Label2" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />
<asp:TextBox runat="server" ID="TextBox1" Text='<%# Eval("nu") %>'></asp:TextBox><br />
ID : <asp:Label ID="Label3" runat="server" Text='<%# Eval("id") %>'></asp:Label><br />


</ItemTemplate>
</asp:TemplateField>
</Columns>

</asp:GridView>


protected string SqlEdit = "update Table1 set nu=@nu where id=@id";
public string lasteror;


public void Edit(int nu, int id)
{
try
{
SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrin gs["DatabaseConnectionString1"].ConnectionString);
con1.Open();
SqlCommand cmd1 = new SqlCommand(SqlEdit, con1);
cmd1.CommandType = CommandType.Text;
cmd1.Parameters.Add("@nu", SqlDbType.Int).Value = nu;
cmd1.Parameters.Add("@id", SqlDbType.Int).Value = id;
cmd1.ExecuteNonQuery();
con1.Close();
this.lasteror = "اطلاعات ثبت شد";
}

catch
{
this.lasteror = "اشکال در ثبت اطلاعات";
}
}


protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
TextBox textnum = row.FindControl("TextBox1") as TextBox;
Label txtid = row.FindControl("Label3") as Label;


if (textnum != null || txtid != null )
{
int valuenu = Int32.Parse(textnum.Text);
int valueid = Int32.Parse(txtid.Text);

Edit(valuenu, valueid);


}
}
}

sobhan5968
یک شنبه 11 دی 1390, 13:33 عصر
سلام اقای fakhravari عزیز

اگه کد زیر رو توضیح بدین ممنون میشوم .
protected void Button1_Click(object sender, EventArgs e) {
foreach (GridViewRow row in GridView1.Rows)
{
TextBox textnum = row.FindControl("TextBox1") as TextBox;
Label txtid = row.FindControl("Label3") as Label;


if (textnum != null || txtid != null )
{
int valuenu = Int32.Parse(textnum.Text);
int valueid = Int32.Parse(txtid.Text);

Edit(valuenu, valueid);


}
}
}


باتشکر از راهنمائی شما

fakhravari
یک شنبه 11 دی 1390, 14:02 عصر
با سلام
در ابتدا باید گرید را به صورت تمپلت در بیاورید
که یک textbox , label موارد بایند میشوند
<asp:TextBox runat="server" ID="TextBox1" Text='<%# Eval("nu") %>'></asp:TextBox>
ID : <asp:Label ID="Label3" runat="server" Text='<%# Eval("id") %>'></asp:Label>

خوب تا اینجا بعد از اجرا داده ها نمایش داده میشوند.
با گذاشتن یه باتن و نوشتن دستور foreach
مقدار id رکورد درون label3 میرود و مقدار نمره نیز از TextBox1 میگیرد.
بعد با این تابع Edit(valuenu, valueid); مقادیر بروز رسانی میشوند

crazy_1892
یک شنبه 11 دی 1390, 14:27 عصر
به این آدرس برو ببین همینطوری کارتو راه میندازه اگه خواستی بگو کدشو واست توضیح بدم
www.emadrese.ir (http://www.emadrese.ir)
قسمت مدارس راهنمایی> کاربر مدیر مدرسه
نام کاربری :987654321
کلمه عبور : 123456
بعد از وارد شدن به منوی
نمرات > ماهانه > بر حسب کلاس
برو
بعد سال تحصیلی / پایه / شعبه کلاس
ماه : آبان
و یکی از درسارو انتخاب کن در آخر هم نمایشو بزن
ببین ثبت نمراتش با آجاکسه

سلام دوست عزیز سایت شما را دیدم خیلی قشنک بود 2 سوال داشتم اگه لطف کنین حواب بدین ممنون میشم
اول اینکه صفحه ورود را چی جوری نوشتین که popUp باز می شه و login مکنیم
دومم اینکه از چه کامپوننتی برای combox وبقیه آبجکت ها استفاده کردین؟

jigily
پنج شنبه 04 خرداد 1391, 15:04 عصر
خيلي ممنون از پاسختون فقط اينكه من از كامپونن telerik استفاده مي كنم نميدونم بجاي grideviewrow بايد از چه چيزي استفاده كنم؟

dorparasti
پنج شنبه 04 خرداد 1391, 16:43 عصر
با سلام
دوستان اینم کدش
اشکال این کد در اینه که اگرچه با یک کلیک اتفاق می افته اما در پشت صحنه برای هر نمره یک اتصال به دیتابیس برقرار میشه که برای یک کلاس 30 نفره یعنی 30 اتصال فقط برای یک عملیات . حالا سیستم هایی هستند که تمام نمرات یک کلاس رو در تمام دروس در یک سری وارد می کنند حالا حساب کنید چه تعداد اتصال لازمه برای اینکار .

راه بهتری که من پیشنهاد می کنم اینه که با یک اتصال به دیتابیس تمام اطلاعات ثبت بشن . اینکا رو با استفاده از نوع داده SqlDbType.Xml می شه انجام داد . توضیح کلیش اینطوریه که شما در تابع edit می یای و یک ساختار xml می سازی ( برای هر نمره / دانشجو یک node ) می سازی و بعد در قالب یک پارامتر از نوع بالا میفرستی به یک stored Procedure در سمت دیتابیس . در اون پروسیجور xml رو پردازش و تفکیک می کنی و اطلاعات رو ثبت یا بروز می کنی .

+ اینجا (http://www.sqlservercentral.com/Forums/Topic1017781-391-1.aspx#bm1018071) و + اینجا (http://stackoverflow.com/questions/4660398/bulk-insert-from-a-xml-in-sql-server) رو ببینید

این هم (http://www.codeproject.com/Articles/29895/Extracting-XML-and-Insert-Bulk-Data-using-LINQ-to) البته یک روش ساده تر و تمیزتر هستش که با linq انجام میشه .