PDA

View Full Version : چطوری داخل Gridview محاسبات رو با با این شرایط انجام بدم؟



behzad1367
سه شنبه 08 شهریور 1390, 19:35 عصر
سلام.یک گرید ویو دارم که عکسش رو گذاشتم.میخام وقتی کاربر مقدار ستون A و B رو وارد کرد این 2 ستون در هم ضرب بشن و نتیجه توی ستون C هر سطر ریخته بشه.
در ضمن میخام همیشه یه سطر خالی پایین GridView وجود داشته باشه بطوریکه به محض اینکه کاربر اطلاعات سطر آخر رو وارد کرد به صورت خودکار یه سطر دیگه به آخر گرید اضافه بشه.
دقت کنید که نمیخام این سطر به قسمت Footer Template اضافه بشه.
لطفا از اساتید هرکی بلده سورسشو بنویسه مربوط به پروژه پایان ترممه:گریه:

farcry
چهارشنبه 09 شهریور 1390, 18:28 عصر
بهترین راه برای اینکه سریعا مقدار a,b رو توی c بزاره استفاده از setInterval هستش.
البته میشه از element.onchange هم استفاده کرد.ولی باید منتظر کلیک سطر اخر بمونی....
مثلا میگی



<html>
<body>
<br>
a<input type="text" id="1" value="">*
b<input type="text" id="2" value="">
=c<input type="text" id="3" value="">
<br>
<script language="javascript" type="text/javascript">

var aaa,bbb,ccc;
function a()
{
aaa=document.getElementById("1").value;
bbb=document.getElementById("2").value;
ccc=aaa*bbb;
document.getElementById("3").value=ccc;
}
setInterval("a()",500)
</script>
</body>
</html>

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


sss=table.rows.length
rows[sss].cells[0];


رو شناسایی کنی (سعی کن از i%) استفاده کنی....چون بعدش میخوای بگی که اگه روشون کلیک شد یه دونه سطر سه قسمتی به
اخرین سطر(1- table.rows.length) اضافه بشه....
بعد باید بتونی مقدار اخرین سطر رو تند تند اپدیت کنی ......و الا یه سطر از اخرین سطری که تو نوشتی نه اخرین سطری که اون اضافه کرده ... به جدول اضافه میشه و حالا خر بیار و باقالی بار کن ....

کلا درسر زیاد داره.
سورس کامل گرید ویو رو بزار بچه ها جوابتو میدن ....

behzad1367
پنج شنبه 10 شهریور 1390, 21:08 عصر
داداش ممنون که جواب دادی.با این کدی که نوشتم میشه محاسبات رو انجام داد:

for (i = 0; i < $("input[id*='ContentPlaceHolder1_Wizard2_TblIncomes_Rels_T blIncomes_Text']").length; i++) {

if ($("input[id*='ContentPlaceHolder1_Wizard2_TblIncomes_Rels_T blIncomes_Text']").eq(i).val() == "") {
$("input[id*='ContentPlaceHolder1_Wizard2_TblIncomes_Rels_T blIncomes_Text']").eq(i).val(0);
d = 0;

}
if ($("input[id*='ContentPlaceHolder1_Wizard2_TblIncomes_Unit_T blIncomes_Text']").eq(i).val() == "") {
$("input[id*='ContentPlaceHolder1_Wizard2_TblIncomes_Unit_T blIncomes_Text']").eq(i).val(0);
c = 0;

}
var d = parseInt($("input[id*='Rels_TblIncomes_Text']").eq(i).val());


var c = parseInt($("input[id*='Unit_TblIncomes_Text']").eq(i).val());
var res = 0;
res = d + c;
$("input[id*='ContentPlaceHolder1_Wizard2_TblIncomes_Total_ TblIncomes_Text']").eq(i).val(res);


}

اما هنوز یه مشکل دارم.
من میخام وقتی روی هرکدوم از تسکت باکس های گرید که رویداد Keyup اتفاق افتاد یه سطر خالی به Gridview اضافه بشه.این کد رو برای این کار نوشتم:

function addRowToTable() {

var tbl = document.getElementById("ContentPlaceHolder1_Wizard2_TblIncomes").firstChild.nextSibling.nextSibling;


var lastRow = tbl.rows.length;



if (swch % 2 == 0) {
color = "white";
}

else {

color = "#F7F6F3";
}




swch = parseInt(swch) + 1;

// if there's no header row in the table, then iteration = lastRow + 1
var iteration = lastRow;

var row = tbl.insertRow(lastRow - 1);




$(row).css('background-color', color);
// left cell
var radif = row.insertCell(0);


// right cell
var nam = row.insertCell(1);
var el = document.createElement('input');
el.type = 'text';
el.name = 'txtRow' + iteration;
el.id = 'txtRow' + iteration;
el.size = 20;
nam.appendChild(el);


var tedad = row.insertCell(2);
var el2 = document.createElement('input');
el2.type = 'text';
el2.name = 'ContentPlaceHolder1_Wizard2_TblIncomes_Rels_' + iteration;
el2.id = 'ContentPlaceHolder1_Wizard2_TblIncomes_Rels_' + iteration;
el2.size = 20;
tedad.appendChild(el2);



var jam = row.insertCell(3);
var el3 = document.createElement('input');
el3.type = 'text';
el3.name = 'txtRow' + iteration;
el3.id = 'txtRow' + iteration;

el3.size = 20;
jam.appendChild(el3);


var kol = row.insertCell(4);
var el4 = document.createElement('input');
el4.type = 'text';
el4.name = 'txtRow' + iteration;
el4.id = 'txtRow' + iteration;
el4.size = 20;
kol.appendChild(el4);


}

با این کد وقتی کاربر روی هر کدوم از تکست باکس ها کلیدی رو فشار میده تابع اجرا شده و یه سطر خالی حاوی 4 تا تکست باکس به گرید اضافه میشه.اما مشکل اینجاست که وقتی روی تکست باکس های جدیدی که به گرید اضافه میشن کلیدی رو فشار میدم دیگه انگار تابع اجرا نمیشه و هیچ سطری به گرید اضافه نمیشه.انگار که این تکست باکس ها جزو صفحه به حساب نمیان!
شما میتونی کمک کنی چی کار کنم تا روی هر تکست باکسی از گرید ویو که Keyup اتفاق افتاد تابع addRowToTable() اجرا بشه؟

farcry
شنبه 12 شهریور 1390, 19:06 عصر
سلام دوست عزیز چند روزی نبودم
مگه نفهمیدی بالا چی نوشتم ... گفتم باید یه جوری سطر و ستون اخر رو تند تند اپدیت کنی....
چند تا راهنمایی می کنم.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1. حتما اگه از یه هدر توی جدول استفاده می کنی باید به اخرین سطر و ستون دقت کنی.چون یه دونه اینور اونور باعث عمل نکردن میشه.
پس مقدار اخرین سطر و ستون رو اگه هدر داشتیم اینجوری میشه


var lastRow = tbl.rows.length;


ولی اگه از هدر استفاده نکردی باید یه دونه بهش اضافه کنیم.... اینو فکر کنم فهمیدی چرا اینجوری شد.
حالا کد پایینی خودت...
2.تو خط سوم id رو درست کن دو تا فاصله افتاده.
3.تو خط 27 دقت کن چند تا هدر داری بعد اینسرت کن.
4. تو خط 51


el2.id = 'ContentPlaceHolder1_Wizard2_TblIncomes_Rels_' + iteration;

یادت باشه در هر مرحله id سطر اخر عوض میشه این خیلی مهمه...!
مثلا به کد زیر نگاه بنداز...



<html> <body> <center> <table border="1" width="200" height="80" bgcolor="#000" id="ali"> <tr width="100" height="40"> <td><center><font color='#ffffff'>c </font></center></td> <td><center><font color='#ffffff'>b </font></center></td> <td><center><font color='#ffffff'>a </font></center></td> </tr> <tr> <td><input type="text" id="1"></td> <td><input type="text" id="2"></td> <td><input type="text" id="3"></td> </tr> <tr> <td><input type="text" id="4"></td> <td><input type="text" id="5"></td> <td><input type="text" id="6"></td> </tr> <tr> <td><input type="text" id="7"></td> <td><input type="text" id="8"></td> <td><input type="text" id="9"></td> </tr> </table> </center> <script language="javascript" type="text/javascript"> table=document.getElementById("ali"); sa=table.rows.length-1; table.rows[sa].cells[0].onclick=function a() { var row = table.insertRow(table.rows.length); /////////////////////////////////////////////////// var cellRight = row.insertCell(0); var el = document.createElement('input'); el.type = 'text'; el.name = 'txtRow' + sa; el.id = 'txtRow' + sa; cellRight.appendChild(el); ////////////////////////////////////////////////// /////////////////////////////////////////////////// var cellleft = row.insertCell(1); var el = document.createElement('input'); el.type = 'text'; el.name = 'txtRow' + sa; el.id = 'txtRow' + sa; cellleft.appendChild(el); ////////////////////////////////////////////////// /////////////////////////////////////////////////// var cellRight1 = row.insertCell(2); var el = document.createElement('input'); el.type = 'text'; el.name = 'txtRow' + sa; el.id = 'txtRow' + sa; cellRight1.appendChild(el); ////////////////////////////////////////////////// } </script> </body> </html>


من دیگه وقت ندارم خودت یه جوری باید مقدار sa رو اپدیت کنی که سری بعد وقتی رو اخریش کلیک میشه اضافه کنه.

behzad1367
شنبه 12 شهریور 1390, 20:23 عصر
داداش دستت درد نکنه که جواب میدی
مشکلم حل شد.
حالا یه مساله دیگه هست:
میخام روی هر سطر که کاربر کلیک کرد اون سطر حذف بشه
اما مشکل اینجاست که من این سطر ها رو در سمت کلاینت ساختم و نمیتونم سطرهایی از گرید رو که داخل پایگاه هستن حذف کنم
شما راه حلی نداری که بشه این نوع سطر هارو هم از گرید و هم از پایگاه داده با جاوا اسکریپت حذف کرد؟

farcry
شنبه 12 شهریور 1390, 23:12 عصر
کنترل کلاینت کاری نداره چون که...


function remove()
{
var tbl = document.getElementById('table shoma');
var lastRow = tbl.rows.length;
if (lastRow > 2) tbl.deleteRow(lastRow - 1);
}

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

خود من در حال یاد گیری sql server 2008 و اکسس هستم هنوز به اون صورت نمی تونم کمک کنم و درست نمی تونم کوئری استرینگ بهت بدم....

خودت از چی استفاده میکنی ؟

از بچه هایی که اینو می خونن خواش میکنم کمکش کنید...