PDA

View Full Version : کنترل های html در گرید ویو



aminireza65
شنبه 23 فروردین 1393, 21:28 عصر
سلام دوستان
من یک گرید ویو دارم و این گرید ویو یه تمپلیت فیلد داره که درون اون یه کنترل تکست htmlای گذاشتم(به خاطر کد جاوا اسکریپتی که براشون نوشتم).
اگر کنترل تکست سمت سروری بود خیلی راحت میشد با اندیس سطر مورد نظر از گرید بهش دسترسی داشت و مقدارشو خوند.
ولی این سمت کلاینته و فقط یه id و name داره و حتی با اندیس سطر مورد نظر از گرید هم فقط اولین کنترل تکست یعنی همون سطر اول رو میشه بهش دسترسی داشت و مقدارشو گرفت.
به نظرتون چه طور من میتونم مقدار تکست باکس های کلاینتی موجود در تمپلیت فیلد رو بخونم؟؟؟

بهنام صناعی
شنبه 23 فروردین 1393, 21:43 عصر
کنترل های سمت سرور در نهایت به المنت های HTML مورد نظر تبدیل میشن. دلیل عدم استفاده ی شما از همون کنترل TextBox سمت سرور چی هست؟

aminireza65
شنبه 23 فروردین 1393, 21:47 عصر
کنترل های سمت سرور در نهایت به المنت های HTML مورد نظر تبدیل میشن. دلیل عدم استفاده ی شما از همون کنترل TextBox سمت سرور چی هست؟

این تکست باکس برای فیلد قیمت هست. من یه کد جاوا اسکریپت دارم برای جدا کردن قیمت وارد شده توسط کاربر به صورت 3 رقم 3 رقم.
به خاطر همین مجبور شدم به جای کنترل سمت سرور از کنترل کلاینتی استفاده کنم.

بهنام صناعی
شنبه 23 فروردین 1393, 22:31 عصر
شما روی همون کنترل سمت سروری هم می تونید کد های جاوا اسکریپت رو اجرا کنید. چون در انتها تبدیل میشه به یک المنت HTML. در نهایت هم به سادگی به مقدارش در سمت سرور دسترسی خواهید داشت.

aminireza65
شنبه 23 فروردین 1393, 22:45 عصر
شما روی همون کنترل سمت سروری هم می تونید کد های جاوا اسکریپت رو اجرا کنید. چون در انتها تبدیل میشه به یک المنت HTML. در نهایت هم به سادگی به مقدارش در سمت سرور دسترسی خواهید داشت.

واقعا؟
من این دستورات رو برای جدا کردن قیمت به صورت 3 رقم 3 رقم در رویداد onkeyup کنترل تکست کلاینتی نوشتم:
function DigitToMoney() {
var Digit = document.getElementById("Digit").value;
var separator = ",";
var int = Digit.replace(new RegExp(separator, "g"), "");
var regexp = new RegExp("\\B(\\d{3})(" + separator + "|$)");
do {
int = int.replace(regexp, separator + "$1");
}
while (int.search(regexp) >= 0)
document.getElementById("Digit").value = int;
}

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

بهنام صناعی
شنبه 23 فروردین 1393, 23:07 عصر
از همین کد ها استفاده کنید. فقط در مورد کنترل TextBox چون آیدی های سمت سرور به همون شکل در سمت کلاینت هم ظاهر نمیشن چندین راه حل پیش رو دارید:

1. خاصیت ClientIDMode کنترل مورد نظر رو به Static ست کنید که در این مورد چون داخل GridView دارید از اون استفاده می کنید توصیه نمیشه.
2. از class یا CssClass استفاده کنید و سلکتور های JQuery
3. در رویداد مورد نظر (
onkeyup)

خود کنترل رو به تابع پاس بدید.
4. از ClientID کنترل مورد نظر برای دسترسی به المنت معادل در سمت کلاینت استفاده کنید

که روش سوم توصیه میشه. در ضمن کد های شما دارند از المنت خاصی با آیدیDigit استفاده می کنند. امیدوارم به همه ی المنت ها آیدی یکسانی نداده باشید :)



<script>

function DigitToMoney(el) { var Digit = el.value; var separator = ","; var int = Digit.replace(new RegExp(separator, "g"), ""); var regexp = new RegExp("\\B(\\d{3})(" + separator + "|$)"); do { int = int.replace(regexp, separator + "$1"); } while (int.search(regexp) >= 0) el.value = int; }
</script>

<asp:TextBox ID="TextBox1" runat="server" onkeyup="DigitToMoney(this)"></asp:TextBox>

mRizvandi
شنبه 23 فروردین 1393, 23:18 عصر
متاسفانه کدی که گذاشتید به خاطر مشکل سایت قابل خوندن نیست.
اما اگر می خواهید یک کنترل سروری داشته باشید که در سمت کلاینت هم به اون دسترسی راحتی داشته باشید می تونید خصوصیت ClientIDMode اون کنترل رو با Static مقداردهی کنید.
اگر تعداد کنترل بیش از یک مورد باشه می تونید با استفاده از نام کلاس (یک نام کلاس خاص بسازید - می تونه استایلی نداشته باشه) کنترل رو پیدا کنید و کدتون رو روی اون اجرا کنید.

aminireza65
شنبه 23 فروردین 1393, 23:19 عصر
پس با این حساب مشکل شد دو تا.
من میخوام مثل این سایت کاربر حین وارد کردن ارقام قیمت، اون ارقام 3 رقم 3 رقم جدا بشن. نه بعد از وارد کردن کل ارقام.
در این سایت بخش جستجوش رو ببینید:
http://www.simcart.com/سیم%20کارت%20رند

بهنام صناعی
شنبه 23 فروردین 1393, 23:23 عصر
دوست عزیز، نمونه کدی که گذاشتم دقیقا کاربرد مورد نظر شما رو پیاده کرده.
لطفا پاسخ ها رو با دقت بیشتری بخونید :)

aminireza65
شنبه 23 فروردین 1393, 23:33 عصر
ممنونم دوست خوبم مشکلم حل شد.
ولی یه سوال دیگه راجع به نوع داده ای پولی.
من در دیتابیس چه نوع داده ای در نظر بگیرم که به همین صورت ارقام 3 رقم 3 رقم جدا باشند (طبق همین دستورات جاوا اسکریپت کاربر قیمت رو وارد میکنه و در دیتابیس درج میکنه) و همچنین بتونم بر حسب قیمت مثل همون سایتی که لینکش رو بالا گذاشتم سرچ کنم؟؟؟
بارم ممنوووون

بهنام صناعی
شنبه 23 فروردین 1393, 23:37 عصر
در دیتابیس از نوع Money استفاده کنید. معادل اون در #C نوع داده ای decimal هست. موقع ذخیره یادتون باشه باید یه تبدیل نوع string به decimal انجام بدید. اون کاما ها رو هم حذف کنید. در موقع نمایش برای اینکه سه رقم سه رقم و با کاما از هم جدا بشن از رشته های فرمت دهی استفاده کنید:

"{0:N0}"

aminireza65
شنبه 23 فروردین 1393, 23:51 عصر
این نوع داده ای یعنی money در کوئری ها برای عملگر between و یا مرتب سازی بر حسب اون درست کار میکنه؟ منظورم اینه که مثل نوع های عددی دیگه مثل integer کار میکنه؟
چون من تا حالا با این نوع داده کار نکردم میپرسم.