PDA

View Full Version : اپدیت در gridviewبدون قرار گرفتن فیلد در حالت textbox



fereshte22
شنبه 15 اردیبهشت 1386, 10:58 صبح
سلام
توی روال update در gridview وقتی قراره فیلدی اپدیت بشود .اون فیلد در حالت textbox قرار میگیرد.حالا سوال من این است که ایا برای اپدیت کردن یک فیلد در دیتابیس باید همیشه فیلد به حالت textbox دربیاید.مثلا من چند فیلد شامل هزینه و بیمه وغیره و یک فیلد دیگر هم دارم که جمع این چند فیلد است.من میخواهم وقتی فیلد های مذکور اپدیت میشوند (در روال
RowUpdating گرید ویو)جمع انها نیز همان موقع اپدیت شودودر دیتابیس ذخیره شود.و نیازی به textbox برای این فیلد نداشته باشم.
برای اپدیت فیلدهای gridview من از کد زیر استفاده کردم


Sub AuthorsGridView_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
Dim index As Integer = AuthorsGridView.EditIndex
Dim row As GridViewRow = AuthorsGridView.Rows(index)
Dim price As TextBox = CType(row.FindControl("priceTextBox"), TextBox)
Dim bimeh As TextBox = CType(row.FindControl("bimehTextBox"), TextBox)
e.NewValues("price") = price.Text
e.NewValues("bimeh") = bimeh.Text
End Sub


برای ایجاد textbox ها نیز از کد زیر استفاده کردهام.


<asp:TemplateField HeaderText=" یêى کںéں">
<ItemTemplate>
<%#Eval("bimeh")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="bimehTextBox" runat="server" Text='<%#Eval("bimeh")%>' Width="90"></asp:TextBox>
<br />
</EditItemTemplate>
<ItemStyle VerticalAlign="Top" />

</asp:TemplateField>

babi_wd
شنبه 15 اردیبهشت 1386, 11:23 صبح
باید اون قسمت رو که جمع رو نشون میده به صورت template انتخاب کنی
بعد هر دو قسمت نمایش و ویرایش رو یه labelبزاری
برای نمایش جمع میتونی از یه تابع استفاده کنی که ورودیش فیلدای دیگت باشه و به لیبلت بایند شه
یا جاوا جون استفاده کنی

fereshte22
شنبه 15 اردیبهشت 1386, 12:28 عصر
دوست عزیز از راهنمایتون ممنون هستم.فقط میشه بگید این تابع را به چه صورت باید بنویسم(چه تابعی و چگونه باید استفاده کنم.؟ )در ضمن این تابع را به جای مقدار text کنترل label باید بنویسم؟
در روال rowupdating چیزی نباید بنویسم؟

babi_wd
شنبه 15 اردیبهشت 1386, 14:12 عصر
فرض میکنیم 2تا فیلد شما count(تعداد)price(قیمت واحد) باشه
و بخوای در یه ستون دیگه ضرب این دو فیلد رو انجام بدی



<asp:Label ID="Label1" runat="server" Text='<%#MUL(Eval("count"),Eval("price")) %>'></asp:Label>


خود تابع هم


protected string MUL(opbject c,object p)
{
......
}

fereshte22
شنبه 15 اردیبهشت 1386, 16:00 عصر
نمیدونم چرا این تابع sum و یا mul را هر جوری تعریف میکنم خطا میگیرد.و میگه تابع تعریف نشده است
این تابع را باید در قسمت کدهای دات نت تعریف کنیم و یا کدهای html ؟
توی تابع باید دستور خاصی بنویسیم؟

babi_wd
شنبه 15 اردیبهشت 1386, 16:12 عصر
این تابع را باید در قسمت کدهای دات نت تعریف کنیم و یا کدهای html ؟

در قسمت کدهای دات نت

توی تابع باید دستور خاصی بنویسیم؟
بله
دستور تبدیل دو آبجکت به INT، عمل ضرب و برگشت به صورت رشته
کد خطا رو بزار

fereshte22
شنبه 15 اردیبهشت 1386, 17:41 عصر
من تابع mul را به صورت زیر تعریف کردم


ProtectedSub mul(ByVal c AsObject, ByVal p AsObject)
Dim i, j, javab AsInteger
Dim javab1 AsString
i = CType(c, Integer)
j = CType(p, Integer)
javab = i * j
javab1 = javab.ToString
EndSub

در قسمت html هم همان طور که شما گفتید نوشتم ولی وقتی برنامه را اجرا میکنم خطای زیر را میدهد
Compiler Error Message: BC30518: Overload resolution failed because no accessible 'ToString' can be called with these arguments]

Alireza_Salehi
شنبه 15 اردیبهشت 1386, 18:03 عصر
اولا باید از Function استفاده کنید نه SUB!
یک تابع تعریف کنید که خروجیش از نوع String باشه یا توی همون قسمت HTML خروجی رو به String تبدیل کنید(با متد ToString).