ورود

View Full Version : سوال: خالي كردن dropdownlist در gridview



mandana.k
یک شنبه 19 اردیبهشت 1389, 15:57 عصر
دوستان عزيز من يك برنامه تحت webنوشته ام با VB.net 2008 كه در آن يك gridview است كه اين gridview داراي دوستون dropdownlist مي باشد كه اين dropdownlist داراي يك سري اطلاعات مي باشد چگونه وقتي صفحه load مي شود مي توان اين dropdownlist ها خالي نشان داده شود تا با انتخاب بتوان آن را پركرد مثلا در برنامه هاي windows base ما در page_load مينوشتيم combobox1.selectindex=-1

spring69
دوشنبه 20 اردیبهشت 1389, 00:56 صبح
سلام دوست عزیز.
ایندکس 1- در DropDownList کاربرد نداره.
این کد یه آیتم به خونه ی صفرم DropDownList اضافه میکنه با متن please select one. این کد رو در رویداد RowDataBound مربوط به GridView بنویس:

If e.Row.RowType = DataControlRowType.DataRow Then
Dim ddl As DropDownList = DirectCast(e.Row.FindControl("DropDownList1"), DropDownList)
ddl.Items.Insert(0, New ListItem("Please Select One Item", "Please Select One Item"))
End If


Good Luck

mandana.k
دوشنبه 20 اردیبهشت 1389, 09:50 صبح
دوست عزيز من از اين كد استفاده كردم ولي روي خط آخر

ddl.Items.Insert(0, New ListItem("Please Select One Item", "Please Select One Item"))
اين error رامي دهد
Object reference not set to an instance of an object

آيا به جاي "Please Select One Item"چيزي بايد نوشته شود اين مورد خيلي ضروري است

spring69
دوشنبه 20 اردیبهشت 1389, 10:36 صبح
دوست عزيز من از اين كد استفاده كردم ولي روي خط آخر

ddl.Items.Insert(0, New ListItem("Please Select One Item", "Please Select One Item"))اين error رامي دهد
Object reference not set to an instance of an object

آيا به جاي "Please Select One Item"چيزي بايد نوشته شود اين مورد خيلي ضروري است
من دوباره امتحان کردم و مشکلی نداشت.
به جای DropDownList1 ، دقیقا نام DropDownList خودت که در DataGridView داری وارد کن.
به جای Please select one هرچی میخوای بنویس.
Good Luck

Muhammad-Ali
چهارشنبه 16 تیر 1389, 13:33 عصر
خیلی گشتم. خیلیها هم با این مسئله مشکل داشتند. بیشترشون رو با دقت دیدم، اما نمی دونم مشکل این کدی که از C#‎‎ به VB تبدیل چیه!
در رویداد GridView1_RowDataBound پیغام object reference is not set to an instance of an object میده!؟ دو روز دارم میگردم و به جایی نرسیدم. لطفا کمک کنید ممنون.
وقتی این ها رو درخواست میکنم:


Dim strFF As String = myDataRowView("Name").ToString()
Dim strSize As String = myDataRowView("Size").ToString()


این Error رو میده:


Object reference not set to an instance of an object.










Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls

Partial Public Class User
Inherits System.Web.UI.Page
Dim strPath As String = ""
Dim strFolderName As String = ""

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then
Call Show()
End If
End Sub

Private Sub Show()
ViewState("FN") = System.Web.HttpContext.Current.Request("FN")
If (ViewState("FN") IsNot Nothing) AndAlso (ViewState("FN").ToString() <> "") Then
strFolderName = ViewState("FN").ToString()
End If

strPath = System.Web.HttpContext.Current.Server.MapPath("") & "\" & strFolderName

Dim myDataTable As New System.Data.DataTable()
myDataTable.Columns.Add("#", GetType(System.Int32))
myDataTable.Columns.Add("Name", GetType(System.String))
myDataTable.Columns.Add("Size", GetType(System.Int32))
myDataTable.PrimaryKey = New System.Data.DataColumn() {myDataTable.Columns("#")}
myDataTable.Columns("#").AutoIncrement = True
myDataTable.Columns("#").AutoIncrementSeed = 1

Dim myDataRow As System.Data.DataRow = Nothing

Dim myDirectoryInfo As New System.IO.DirectoryInfo(strPath)
For Each CurrentDirectory As System.IO.DirectoryInfo In myDirectoryInfo.GetDirectories()
myDataRow = myDataTable.NewRow()
myDataRow("Name") = "*" & CurrentDirectory.Name
myDataRow("Size") = System.DBNull.Value
myDataTable.Rows.Add(myDataRow)
Next

For Each oFileInfo As System.IO.FileInfo In myDirectoryInfo.GetFiles()
myDataRow = myDataTable.NewRow()
myDataRow("Name") = oFileInfo.Name
myDataRow("Size") = oFileInfo.Length
myDataTable.Rows.Add(myDataRow)
Next

GridView1.Visible = True
GridView1.DataSource = myDataTable
GridView1.DataBind()

End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
GridView1.PageIndex = e.NewPageIndex
Call Show()
End Sub

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound


Dim myDataRowView As System.Data.DataRowView = DirectCast(e.Row.DataItem, System.Data.DataRowView)
Dim strFF As String = myDataRowView("Name").ToString()
Dim strSize As String = myDataRowView("Size").ToString()

If e.Row.RowType.ToString() <> System.Web.UI.WebControls.ListItemType.Header.ToSt ring() AndAlso e.Row.RowType.ToString() <> System.Web.UI.WebControls.ListItemType.Footer.ToSt ring() Then
e.Row.Cells(0).HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center
e.Row.Cells(0).VerticalAlign = System.Web.UI.WebControls.VerticalAlign.Middle
e.Row.Cells(0).Width = System.Web.UI.WebControls.Unit.Pixel(50)
e.Row.Cells(0).ForeColor = System.Drawing.Color.DarkOliveGreen
e.Row.Cells(0).Font.Bold = True
e.Row.Cells(0).Font.Name = "Verdana"
e.Row.Cells(0).Font.Size = System.Web.UI.WebControls.FontUnit.Point(8)
e.Row.Cells(0).Text = System.Convert.ToString(e.Row.DataItemIndex + 1)
End If

Dim CurrentHpr As System.Web.UI.WebControls.HyperLink = DirectCast(e.Row.FindControl("hprFolders"), System.Web.UI.WebControls.HyperLink)
If strFF.Contains("*") Then
strFF = strFF.Substring(1)
CurrentHpr.NavigateUrl = "FileManager.aspx?FN=" & strFolderName & "\" & strFF
CurrentHpr.CssClass = "gird"
End If
CurrentHpr.Text = strFF

e.Row.Cells(1).HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center
e.Row.Cells(1).VerticalAlign = System.Web.UI.WebControls.VerticalAlign.Middle
e.Row.Cells(1).Width = System.Web.UI.WebControls.Unit.Pixel(150)
e.Row.Cells(1).Font.Name = "Verdana"
e.Row.Cells(1).Font.Bold = True
e.Row.Cells(1).Font.Size = System.Web.UI.WebControls.FontUnit.Point(8)
e.Row.Cells(1).ForeColor = System.Drawing.Color.Navy

If strSize IsNot Nothing AndAlso strSize <> "" Then
Dim CurrentLbl As System.Web.UI.WebControls.Label = DirectCast(e.Row.FindControl("lblSize"), System.Web.UI.WebControls.Label)
CurrentLbl.Text = strSize & " KB "
End If
e.Row.Cells(2).HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center
e.Row.Cells(2).VerticalAlign = System.Web.UI.WebControls.VerticalAlign.Middle
e.Row.Cells(2).Width = System.Web.UI.WebControls.Unit.Pixel(150)
e.Row.Cells(2).Font.Name = "Verdana"
e.Row.Cells(2).Font.Bold = True
e.Row.Cells(2).Font.Size = System.Web.UI.WebControls.FontUnit.Point(8)
e.Row.Cells(2).ForeColor = System.Drawing.Color.Orange


End Sub


Protected Sub GridView1_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs)
e.SortExpression = "Name"
e.SortDirection = SortDirection.Ascending
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Call Show()
End Sub
End Class

Muhammad-Ali
پنج شنبه 17 تیر 1389, 01:39 صبح
بالاخره جواب سوالم رو از تو MSDN خود مایکروسافت پیدا کردم. مینویسم شاید بعدا به درد یه بدبختی مثل من بخوره. البته از فلسفش بی اطلاعم که چطور کار میکنه، چون کارمم این نیست بی خیال، ولی اگر اساتید یه لطفی کنن بگن قضیه چیه، بازم ممنون میشم.
راه حل: اول شروع تابع GridView1_RowDataBound باید این شرط رو بررسی کنین، و در صورت صحیح بودن دستوراتتون رو اجرا کنه. شرط:


If e.Row.RowType = DataControlRowType.DataRow Then
به طور کامل:


Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

If e.Row.RowType = DataControlRowType.DataRow Then
.
.
.
کدهای شما
.
.
.
End If
End Sub

BreakPoint هم که گذاشتم، برای بار سوم که IF رو چک میکنه، میفته داخل IF و دستورات رو اجرا میکنه. دو بار اولی چیرو بررسی میکنه؟ :متفکر: