PDA

View Full Version : نکته: نمایش GridView در صورت خالی بودن Data Source آن



Behrouz_Rad
شنبه 22 مهر 1385, 16:42 عصر
نکته ای که در رابطه با GridView وجود داره این هست که اگر DataSource منتسب شده به GridView هیچ رکوردی را شامل نشود، GridView نمایش داده نمی شود!
به نظر منطقی میرسه. به عنوان مثال، اگر GridView شما قابلیت های حذف و ویرایش درجا را داشته باشد، این قابلیت ها بدون وجود رکورد معنا نخواهند داشت!
برای رفع این مشکل، GridView مفهوم جدیدی با نام "EmptyDataTemplate" ارائه کرده است که در صورت خالی بودن DataSource از رکورد، قالبی که در این تگ تعریف می شود به جای قالب اصلی GridView نمایش داده خواهد شد.
مسلما تنها قابلیتی که در صورت نبود رکورد معنا پیدا می کند، "اضافه کردن رکورد" است.
بهترین روش، ایجاد یک تگ Table، تعریف Header برای Table و یک ردیف برای قرار دادن Button، TextBox و ... است.
به خاصیت CommandName کنترل Button نامی دلخواه را نسبت دهید. این نام را در روال RowCommand کنترل GridView بازیابی می کنیم.

تگ EmptyDataTemplate را پس از تگ Columns بنویسید.


<EmptyDataTemplate>
<table>
<tr>
<td>Name</td>
<td>Family</td>
</tr>
<tr>
<td><asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>
<td><asp:TextBox ID="txtFamily" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2"><asp:Button ID="btnEmptyAdd" runat="server" CommandName="EmptyInsert" /></td>
</tr>
<table>
</EmptyDataTemplate>



Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs ) Handles GridView1.RowCommand
If e.CommandName = "EmptyInsert" Then
Dim obj_txtName As TextBox
obj_txtName = GridView1.Controls(0).Controls(0).FindControl("txtName")
Response.Write(obj_txtName.Text)
End If
End Sub

موفق باشید.

nooshin_k
سه شنبه 16 مرداد 1386, 16:30 عصر
من از این کد شما در برنامم استفاده کردم error میگیره(از قسمت دوم) و درست هم هست وقتی برای بار اول که صفحه لود میشه و grid خالی است و ما آن را نمیبینیم چطور از آن در کد استفاده کردین

Behrouz_Rad
سه شنبه 16 مرداد 1386, 23:43 عصر
شما احتمالا همین کد رو هلپی! Copy & Paste کردی!
بر مبنای برنامه ی خودت تنظیم کن.
کد تاپیک اعمال با GridView رو ببین.

موفق باشید.

nooshin_k
چهارشنبه 17 مرداد 1386, 11:28 صبح
مرسی درست شد اما مشکل این است که برای همیشه این table جدید را نشان میده حتی بعد از اینکه یک رکورد هم addشد باز هم grid را نشان نمیده همان جدول را نشان میده

merychobi
یک شنبه 21 مرداد 1386, 16:43 عصر
مرسی درست شد اما مشکل این است که برای همیشه این table جدید را نشان میده حتی بعد از اینکه یک رکورد هم addشد باز هم grid را نشان نمیده همان جدول را نشان میده


این مشکل من هم هست لطفا کمک کنید

رها
یک شنبه 21 مرداد 1386, 16:59 عصر
بعد از ایجاد رکورد جدید عملیات bind مربوط به گرید رو فراخوانی کنید تا اطلاعاتی که به تازگی وارد شدند نشان داده بشه.

سار
یک شنبه 21 مرداد 1386, 17:01 عصر
نکته ای که در رابطه با GridView وجود داره این هست که اگر DataSource منتسب شده به GridView هیچ رکوردی را شامل نشود، GridView نمایش داده نمی شود!
به نظر منطقی میرسه. به عنوان مثال، اگر GridView شما قابلیت های حذف و ویرایش درجا را داشته باشد، این قابلیت ها بدون وجود رکورد معنا نخواهند داشت!
برای رفع این مشکل، GridView مفهوم جدیدی با نام "EmptyDataTemplate" ارائه کرده است که در صورت خالی بودن DataSource از رکورد، قالبی که در این تگ تعریف می شود به جای قالب اصلی GridView نمایش داده خواهد شد.
مسلما تنها قابلیتی که در صورت نبود رکورد معنا پیدا می کند، "اضافه کردن رکورد" است.
بهترین روش، ایجاد یک تگ Table، تعریف Header برای Table و یک ردیف برای قرار دادن Button، TextBox و ... است.
به خاصیت CommandName کنترل Button نامی دلخواه را نسبت دهید. این نام را در روال RowCommand کنترل GridView بازیابی می کنیم.

تگ EmptyDataTemplate را پس از تگ Columns بنویسید.


<EmptyDataTemplate>
<table>
<tr>
<td>Name</td>
<td>Family</td>
</tr>
<tr>
<td><asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>
<td><asp:TextBox ID="txtFamily" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2"><asp:Button ID="btnEmptyAdd" runat="server" CommandName="EmptyInsert" /></td>
</tr>
<table>
</EmptyDataTemplate>



Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs ) Handles GridView1.RowCommand
If e.CommandName = "EmptyInsert" Then
Dim obj_txtName As TextBox
obj_txtName = GridView1.Controls(0).Controls(0).FindControl("txtName")
Response.Write(obj_txtName.Text)
End If
End Sub

موفق باشید.
من هیچ وقت از دیتا اینتری تو گریدخوشم نیومده ولی بابت نکته جالبی که فرمودید متشکرم :قلب:

merychobi
دوشنبه 22 مرداد 1386, 18:11 عصر
مشکل اینه که اصلا اطلاعات وارد پایگاه نمی شود تا بعد از بایند چیزی رو نمایش بدهد
اگه ممکنه اقای راد خودشون به این تاپیک جواب دهند

egoldashraf
دوشنبه 22 مرداد 1386, 22:21 عصر
با اجازه اساتید .
شاید این نمونه کمکی بکنه !