PDA

View Full Version : سوال: کمک در Commandfield نوع Select در یک Gridview



amir-m
پنج شنبه 08 اسفند 1392, 18:35 عصر
سلام دوستان. من یه Commandfield از نوع Select برای بدست آوردن ID سطر مورد نظرم گذاشتم و کدش را به شکل زیر نوشتم:


Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles GridView1.SelectedIndexChanged
Dim row_id As String
row_id = Me.GridView1.SelectedRow.Cells(1).Text.ToString()
End Sub


ID یکی از فیلدهای جدولم تو بانک اطلاعاتیه که کلید هم هست ولی قرار نیست تو Gridview نمایش داده بشه (خاصیت visible باید false باشه)
مشکل اینجاست که تا زمانی که ID در حالت Visible هست، با کد بالا می تونم ID سطری که روش کلیک شده را بدست بیارم. اما زمانی که ID در حالت Invisible هست، هیچ مقداری را بر نمی گردونه.
از بین اساتید محترم کسی می دونه مشکل از کجاست؟ (چون قاعدتاً Visible یا Invisible شدن یه عنصر نباید تاثیری به این شکل داشته باشه)

demolition
پنج شنبه 08 اسفند 1392, 18:59 عصر
AutoGenerateColumns رو False کنید و به صورت دستی آیتمهایی که میخایینو اضافه کنید

amir-m
پنج شنبه 08 اسفند 1392, 22:28 عصر
AutoGenerateColumns رو False کنید و به صورت دستی آیتمهایی که میخایینو اضافه کنید

اتفاقاً من نمی دونستم گزینه AutoGenerateColumns دقیقاً چطوری کار می کنه به همین دلیل من هم اون را تو حالت پیش فرضش گذاشته بودم (که false هست) و با استفاده از فلش کنار عنصر Gridview و انتخاب Edit Columns فیدها را یکی یکی انتخاب و add کرده بودم اما با این حال این مشکل برام پیش اومد.
نمی دونم منظورتون از اینکه آیتم ها را به صورت دستی اضافه کنم همین کاریه که انجام شده یا نه؟ یا اینکه من دارم جایی را اشتباه می کنم؟

nice_boy_a
جمعه 09 اسفند 1392, 02:21 صبح
سلام.
برای بدست آوردن id سطر انتخابی از این روش استفاده کن:
اول ستون id رو تبدیل کن به templatefield و visible رو false کن.
وقتی به templatefield تبدیل شد، قائدتا باید یه label داخل templatefield باشه که id رو نگه داری میکنه(فرضا اسمش هست lblID)
و از کد زیر استفاده کن:
Label lbl = (Label)GridView1.FindControl("lblID");
Response.Write(lbl.Text)

amir-m
جمعه 09 اسفند 1392, 12:15 عصر
تشکر دوست عزیز اما من چون خیلی با net. برنامه نویسی نکردم متوجه نشدم منظورتون از اینکه فرمودین: "اول ستون id رو تبدیل کن به templatefield" دقیقاً چیه؟ ستون id من یکی از فیلدهای جدول بانک اطلاعاتیمه که تو پنجره available fields به همراه سایر فیلدها قابل مشاهده است که اون را add می کنم و به Gridview اضافه میشه. آخر همون پنجره Available fields هم Templatefield را میشه انتخاب و add کرد. بعد از اینکه Templatefield را add کردم چطوری اون را به فیلد id ام تبدیل کنم؟ (چون همونطور که گفتم id هم یه فیلد مجزا است)
و اگه ممکنه بفرمائید اینکه می گین: "یه Label داخل templatefield هست که id را نگهداری می کنه" این Label یکی از خواص Templatefield هست (مثل FooterText یا HeaderText) یا نه؟
ممنون میشم اگه یکم بیشتر راهنمایی کنید.

nice_boy_a
جمعه 09 اسفند 1392, 16:02 عصر
یعنی ستون اول گرید ویو باید مثه این باشه
<asp:TemplateField HeaderText="کد" SortExpression="Table_ID" Visible="false">
<ItemTemplate>
<asp:Label ID="lblID" runat="server" Text='<%# Bind("Table_ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
کد بالا یعنی چی ؟
یعنی اینکه یه ستون سفارشی داری که فیلدی از جدول به نام Table_ID رو درون خصوصیت Text از شی Label نمایش میده. و طبق همون کدی که تو پست 4 گفتم می تونی به Label یا همون id دسترسی داشته باشی.