PDA

View Full Version : ثبت نام در کلاسهایی که هنوز ظرفیت آنها پر نشده است



raika17metal
دوشنبه 07 شهریور 1390, 19:45 عصر
سلام دوستان من تو یه صفحه باید ثبت نام در کلاس درسی رو انجام بدم. اطلاعات کلاس (از قبیل ظرفیت و تعاد ثبت نامی های) در یک GridView نمایش داده میشه.
چطوری میتونم از ثبت نام در کلاسهایی که ظرفیت آنها پرشده جلوگیری کنم؟؟
کد ASP

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ClassID"
BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
CellPadding="4" EmptyDataText="اطلاعاتی جهت نمایش وجود ندارد">
<RowStyle BackColor="White" ForeColor="#330099" />
<EmptyDataRowStyle ForeColor="#003300" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="checkboxClass" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CourseName" HeaderText="نام دوره" />
<asp:BoundField DataField="LastName" HeaderText="نام استاد" />
<asp:BoundField DataField="Capacity" HeaderText="ظرفیت" />
<asp:BoundField DataField="Registered" HeaderText="ثبت نام شده" />
<asp:BoundField DataField="Date" HeaderText="تاریخ شروع" />
</Columns>
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
</asp:GridView>

کد #C برای ثبت نام
protected void btnRegister_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
DataKey data = GridView1.DataKeys[row.DataItemIndex];
CheckBox check = (CheckBox)row.FindControl("checkboxClass");
if (check.Checked)
{
int stid = int.Parse(Session["StIDForRegister"].ToString());
int classid = int.Parse(data.Value.ToString());
RegisterInsert(stid, classid, true);
}
}
}
Response.Redirect("RegisteredList.aspx");
}

dontspeak
دوشنبه 07 شهریور 1390, 21:34 عصر
سلام دوست عزیز
شما باید دوتا فیلد داشته باشی. یکی برای تعداد حاظر و یکی برای ظرفیت کلاس و اگه ظرفیت کلاس با تعداد دانش آموزان فعلی برابر شد اجازه افزودن رو نده.

raika17metal
سه شنبه 08 شهریور 1390, 22:42 عصر
اگه به کد ASP دقت کرده باشید می بینید که این دو مورد رو بدست آوردم و تو GridView نشون می دم

<asp:BoundField DataField="Capacity" HeaderText="ظرفیت" />
<asp:BoundField DataField="Registered" HeaderText="ثبت نام شده" />
فقط نمی دونم این دو تا رو چطوری با هم مقایسه کنم!!!! چون جفتشون از نوع BoundField هستند

milade
سه شنبه 08 شهریور 1390, 22:55 عصر
سلام
دو تا فیلد نیازی نیست . چون افزونگی پیش میاد .

شما یه جدول داری که ظرفیت رو داره .
یکی هم وقتی یوزر ثبت نام کرد اطلاعات یوزر و شماره کلاس ذخیره میشه . کافیه برا ظرفیت ثبت نام شده یه Count از جدول ثبت نامی بگیری .
خب حالا وقتی داره دکمه ثبت رو میزنه ، یا با دیتا سورسی که داری بایند میکنی گرید رو تا بتونه ثبت نام کنه ( هر کدوم مایلی ) یه Select بگیر اگر تعداد ثبت نام شده بیش از ظرفیت بود اجازه نده .

چیز خاصی نداره .

موفق باشد .

raika17metal
چهارشنبه 09 شهریور 1390, 00:03 صبح
در GridView به ازای هر ردیف (هر کلاس) یک چک باکس قرار داده شده که دانشجو بتونه همزمان چند گزینه رو انتخاب کنه.
در این شرایط چطوری میشه تشخیص داد که در ردیف های انتخاب شده فیلدهای استخراج شده(ظرفیت و تعداد ثبت نامی ها با هم برابر هستش)

milade
چهارشنبه 09 شهریور 1390, 00:12 صبح
یه foreach میزنی توی row ها و با فیند کنترل کنترل checkbox رو پیدا میکنی . اگر select بود شماره اصلی datakeys رو پیدا میکنی و یه select از جدول ثبت نام شده ها میگیری . اگر جا داشت ثبت نام میکنی وگرنه پیام میدی....

یا اینکه حین بایند کردن اونهایی که ظرفیت پر هست رو نشون نده !

یه خورده بشین فکر کن . میتونی . چیزی نیست که من بخوام بگم . تحلیله !