PDA

View Full Version : سوال: راه حلی برای به دست آوردن اندیس سطر ویرایش شده در gridview



saegheh
یک شنبه 18 بهمن 1394, 21:11 عصر
با سلام
با عرض پوزش از اساتید محترم.من هر چقدر سرچ کردم جوابمو پیدا نکردم.اینه که مجبور شدم تاپیک جدید ایجاد کنم.
من یه مشکل بزرگ دارم.یه سری اطلاعات دارم که توی گرید ویو با asp.net نمایش میدم.هر سطر یک ItemTemplate داره که TextBox هست.یه مقدار توی این TextBox وارد میشه.و به محض وارد شدن مقدار باید تمام مقادیر از اول محاسبه بشن و به نمایش در بیان.من واسه اینکه postback نداشته باشم از Ajax استفاده کردم و خاصیت Autopostback این TextBox رو True کردم.و واسه آپدیت اومدم و همه مقادیر Gridview را با یه حلقه For خوندم و آپدیت کردم.مشکل اینجاست که به شدت سرعت افت پیدا کرد و خیلی زمان میبره تا همه دوباره آپدیت بشن.می خواستم ببینم آیا راهی هست تا من فقط سطر تغییر پیدا کرده را بتونم اندیسشو بدست بیارم و بخونمش.ممنون

mehrzad_ali
دوشنبه 19 بهمن 1394, 16:26 عصر
از رویداد rowdatabound استفاده کن

saegheh
دوشنبه 19 بهمن 1394, 17:45 عصر
از رویداد rowdatabound استفاده کن

با تشکر از پاسخ شما.
فکر میکنم سوالمو خوب مطرح نکردم
یه مثال میزنم
من مثلا می خوام نمرات یه دانشجو را در درس های مختلف تویه یه gridview نمایش بدم که فیلد نمره داخل یک textbox توی gridview نمایش داده میشه.حالا من می خوام وقتی یه نمره را تغییر دادم بدون فشردن هیچ کلیدی اون نمره تویه دیتابیس آپدیت بشه.من این نمره را آپدیت می کنم.به اینصورت که همه مقادیر gridview را با یه حلقه for می خونم و ذخیره میکنم.مشکل هم دقیقا اینجاست که من نمیخوام دوباره همه نمرات را ذخیره کنم.بلکه می خوام فقط سطری که نمره تغییر کرده را ذخیره کنم.ممنون

mehrzad_ali
دوشنبه 19 بهمن 1394, 20:21 عصر
اوکی. راهش اینه که یه دونه دکمه هم کنار تکست باکس بزاری و خاصیت commandArgument دکمه رو بزاری کلید جدولت و خاصیت commandName دکمه رو مثلا بزاری edit بعد توی رویداد rowcommand گریدویوت commandName رو چک کنی و commandargument رو که همون سطری هست که کلیک شده روی دکمش از دیتابیس بکشی و ویرایش کنی . سوالی داشتی بپرس

LostOfMind
دوشنبه 19 بهمن 1394, 21:30 عصر
پست بک گذاشتن برای تکست باکس در وب پیج راه حل مناسبی نیست زیرا با هر حرفی که تایپ میشه اطلاعات به سرور ارسال میشه بر فرض اگه این عبارت رو تایپ کنید : مثال
چهار بار اطلاعات ارسال میشه که یه سرباره برای سرور
پیشنهاد دوستمون که گفتن یه دکمه بزارید راه حل مناسب تری به نظر میاد

saegheh
سه شنبه 20 بهمن 1394, 16:18 عصر
تشکر می کنم که وقت گذاشتید و پاسخ دادید.جوابتون صحیحه.منم می پذیرم.اما متاسفانه برنامه ای که من در حال تهیه کردنش هستم باید با ورود عدد (دقیقا مثله فایل اکسلی که فرمول نویسی شده)یه سری محاسبات را انجام بده و نتیجه رو توی سطرهای دیگه نمایش بده.و من نباید دکمه ای بزنم.بلکه باید خودکار محاسبه کنه.واقعا کار سخت شده واسم.نمی دونم اصلا از لحاظ فنی قابل انجام هست یا نه.البته الان هم کار می کنه.ولی چون من با یک حلقه for همه اطلاعاتو دوباره ثبت می کنم و محاسبه و نمایش انجام میشه سرعتش خیلی پایینه.من باید بتونم فقط سطری که ادیت شده را بخونم.ممنون

saegheh
جمعه 23 بهمن 1394, 15:43 عصر
سلام.من بالاخره کشفش کردم.اومدم و خاصیت pstback تکست باکسمو true کردم و
<asp:TemplateField HeaderText="ضریب">
<ItemTemplate>

<asp:TextBox ID="txtZarib" AutoPostBack="true" Width="35px" Text='<%# Eval("Zarib")%>' runat="server" BackColor="#0066FF" Font-Bold="True" Font-Size="Medium" ForeColor="White" OnTextChanged="txtZarib_SelectedIndexChanged"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="txtZarib" ErrorMessage="مقدار غیرمجاز" Operator="DataTypeCheck" Type="Double" Display="Dynamic"></asp:CompareValidator>

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="txtZarib" runat="server" ErrorMessage="*" Display="Dynamic"></asp:RequiredFieldValidator>

</ItemTemplate>

</asp:TemplateField>



و در آخر در کد برنامه:

protected void txtZarib_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
TextBox thisTextBox = (TextBox)sender;
GridViewRow currentRow = (GridViewRow)thisTextBox.Parent.Parent;
int rowindex = 0;

rowindex = currentRow.RowIndex;




}
catch
{
}
}