PDA

View Full Version : حرفه ای: دسترسی به دیگر ستونهای گرید ویو و نمایش آنها در لیبل



newwebprogrammer
دوشنبه 25 دی 1391, 20:52 عصر
سلام دوستان خسته نباشید

من یک صفحه ای دارم به شکل زیر : که کاربر میاد و رشته و مهارتهای خود را انتخاب میکنه و به شکل زیر بهش میگم که شما اینها رو انتخاب کردید ، اینکار رو با قطعه کد زیر انجام میدم که توی دکمه نوشتم :::


Dim RowID As String = ""

For Each myrow As GridViewRow In GridView1.Rows

Dim ChkSelect As CheckBox = DirectCast(myrow.Cells(0).FindControl("ChkSelect"), CheckBox)

If ChkSelect.Checked = True Then

RowID += "رشته انتخابی :" & " " & GridView1.DataKeys(myrow.RowIndex).Value.ToString( ) & "، مبلغ : " & "مد مربوط به نمایش مبلغ" & "<br/>"

Epayment.Visible = True



lblmaharat.Text = RowID


lblmaharat.Font.Bold = True

lblmaharat.ForeColor = Drawing.Color.Green

End If

Next

If RowID.Length <> 0 Then



RowID = RowID.Remove(RowID.Length - 1)


Else

Epayment.Visible = True

lblmaharat.Text = "لطفا مهارت (های) مورد نظر را انتخاب نمایید"

Epayment.Visible = False

lblmaharat.Font.Bold = True

lblmaharat.ForeColor = Drawing.Color.Red

End If


98396

حالا مشکل من اینه :

جایی که توی عکس زیرش خط قرمز کشیده و نوشته مبلغ :_____________

میخام هر کدوم رو که تیک زده مبلغش رو هم جلوش بیاره مثل انتخاب رشته ...

و در آخر هم میخام مبلغ کل رو حساب کنم

دوستان خواهش میکنم راهنمایی کنید :گریه::گریه::گریه:

raziee
سه شنبه 26 دی 1391, 00:12 صبح
با سلام.
انجام این کار در سمت سرور چه سودی داره؟ میخواهید پردازشی انجام بدید یا فقط جهت اطلاع کاربر هست؟

به هر حال اگه بخواد سمت سرور باشه باید Checkbox ها دارای خاصیت AutoPostBack باشن تا در صورت تغییر فرم به سرور فرستاده بشه . اما این کار صحیح نیست.
به عنوان یک برنامه نویس وب، می بایست به زبان های برنامه نویسی سمت کلاینت تسلط کافی داشته باشید. jQuery برنامه نویسی کلاینت رو خیلی راحت کرده.

aspismylove
سه شنبه 26 دی 1391, 00:23 صبح
با سلام.
انجام این کار در سمت سرور چه سودی داره؟ میخواهید پردازشی انجام بدید یا فقط جهت اطلاع کاربر هست؟

به هر حال اگه بخواد سمت سرور باشه باید Checkbox ها دارای خاصیت AutoPostBack باشن تا در صورت تغییر فرم به سرور فرستاده بشه . اما این کار صحیح نیست.
به عنوان یک برنامه نویس وب، می بایست به زبان های برنامه نویسی سمت کلاینت تسلط کافی داشته باشید. jQuery برنامه نویسی کلاینت رو خیلی راحت کرده.

خیلی ممنون آقای رضئیی ، ولی ما اگه بخایم فقط مقادیر هزینه های انتخاب شده رو نگه داریم و در آخر هم به کاربر بگم که جمع هزینه مهارت های انتخاب شده شما :مثلا 60000 تومان می باشد ، اون موقع چیکار باید کنیم ؟

raziee
سه شنبه 26 دی 1391, 00:29 صبح
ببینید دوست من. این کار باید در سمت کلاینت باشه. کاربر با انتخاب/عدم انتخاب CheckBox ها نباید درگیر یک PostBack باشه. این کار کاربر رو خسته میکنه.
باید تعداد Post ها رو به حد اقل برسونید.
اگه قرار باشه با تغییر وضعیت Checkbox ها عملیاتی در سرور انجام بشه که به صقحه مربوطه نباشه(مثل تغییراتی در دیتابیس) ایجکس پیشنهاد خوبیه.

کاربر باید تغییرات دلخواه رو بده(بدون Postback اضافی) و بعد برای ثبت نهایی اطلاعات به سمت سرور فرستاده بشه.

aspismylove
سه شنبه 26 دی 1391, 00:37 صبح
ببینید دوست من. این کار باید در سمت کلاینت باشه. کاربر با انتخاب/عدم انتخاب CheckBox ها نباید درگیر یک PostBack باشه. این کار کاربر رو خسته میکنه.
باید تعداد Post ها رو به حد اقل برسونید.
اگه قرار باشه با تغییر وضعیت Checkbox ها عملیاتی در سرور انجام بشه که به صقحه مربوطه نباشه(مثل تغییراتی در دیتابیس) ایجکس پیشنهاد خوبیه.

کاربر باید تغییرات دلخواه رو بده(بدون Postback اضافی) و بعد برای ثبت نهایی اطلاعات به سمت سرور فرستاده بشه.

حرف شما کاملا صحیحه ، من هم از ایجکس استفاده میکنم و Postback ها رو هم سعی کردم به حداقل برسونم ، همون دکمه ثبت مهارتهای انتخابی رو از مجبوری گذاشتم چون کدها توی وضعیت تغییر حالت جک باکس کار نمیکنه ، نمیدونم چرا :ناراحت:

حالا میشه راهنمایی کنید چطوری جمع مقادیر هزینه چک باکس های انتخاب شده رو بدست بیارم ؟

raziee
سه شنبه 26 دی 1391, 01:29 صبح
سمت کلاینت:
<script type="text/javascript">
$(function () {
$("#<%= grdSample.ClientID %> input[type=checkbox]").click(function () {
var sum = 0;
$("#<%= grdSample.ClientID %> tr:gt(0)").each(function () {
if ($(this).find("td:eq(0) input[type=checkbox]").is(":checked")) {
sum += parseFloat($(this).find("td:eq(2)").text());
}
});
alert(sum);
});
});
</script>
سمت سرور:
private decimal GetSum()
{
decimal sum = 0;
foreach (GridViewRow item in grdSample.Rows)
{
CheckBox chk = (CheckBox)item.Cells[0].FindControl("chkSelect");
if (chk != null && chk.Checked)
{
decimal cost = decimal.Parse(item.Cells[2].Text);
sum += cost;
}
}
return sum;
}
کد های aspx:
<asp:GridView id="grdSample" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
کد های مربوطه:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
class Sample
{
public string Title { get; set; }
public decimal Cost { get; set; }

public static IEnumerable<Sample> GetData()
{
return new List<Sample> {
new Sample{ Title="Title 1", Cost=25000},
new Sample{ Title="Title 2", Cost=35000},
new Sample{ Title="Title 3", Cost=45000},
new Sample{ Title="Title 4", Cost=55000},
new Sample{ Title="Title 5", Cost=65000},
};
}
}
void Bind()
{
grdSample.DataSource = Sample.GetData();
grdSample.DataBind();
}

protected void btnSave_Click(object sender, EventArgs e)
{

var sum = GetSum();
}