 |
|
ใครเก่ง asp.net ช่วยด้วยครับ ติดปัญหา FindControl ใน ItemTemplate ของ Listview ไม่ได้ |
|
 |
|
|
 |
 |
|
ผมดึงข้อมูลมาโชว์ใน Listview โดยให้สามารถ Edit และ Delete ข้อมูลในแต่ละแถวได้ โดยมีการทำงานที่ต้องการคือ เมื่อ User กดปุ่ม Edit จะปรากฎ EditTemplate ขึ้นมา พร้อมกันนี้ให้ปุ่ม Delete เปลี่ยนสถานะเป็น Disable
ปัญหาที่ผมเจอ คือ ผมไม่สามารถสั่งให้ปุ่ม Delete เปลี่ยนสถานะเป็น Disable ได้ครับ
ติด Error "Object reference not set to an instance of an object."
ถ้าปุ่ม Edit และ Delete ไม่อยู่ใน ItemTemplate ผมสามารถสั่งให้มัน Disable ได้ครับ แต่พอเอามันไปอยู่ใน Tag <ItemTemplate> เมื่อไหร่ จะติด Error ดังกล่าวทันที
รบกวนผู้รู้ช่วยด้วยครับ จะขอบคุณอย่างมากๆๆๆๆๆ ผมพยายามแก้มา 3 วันแล้ว ค้น Google จนตาแฉะ ลองยังไงก็แก้ไม่ได้ครับ จนปัญญาจริงๆ
Source Code
---------------------------------------------------------------------------------------------------
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link type="text/css" href="~/App_Themes/css/grid.css" rel="stylesheet" />
</head>
<body>
<form id="form1" runat="server">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Conn %>"
SelectCommand="SELECT [USN], [CategoryID], [CategoryName], [Description] FROM [Categories] ORDER BY [CategoryID]"
InsertCommand="INSERT INTO [Categories] ([USN],[CategoryID],[CategoryName],[Description],[History]) VALUES (@USN,@CategoryID,@CategoryName,@Description,@USN)"
UpdateCommand="UPDATE [Categories] SET [CategoryName]=@CategoryName, [Description]=@Description, [History]=@USN1 WHERE [USN]=@USN"
DeleteCommand="DELETE FROM [Categories] WHERE [USN]=@USN">
<InsertParameters><asp:Parameter Name="USN" Type="string" /></InsertParameters>
<UpdateParameters><asp:Parameter Name="USN1" Type="string" /></UpdateParameters>
</asp:SqlDataSource>
<asp:ListView ID="lvCategories" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="USN" >
<LayoutTemplate>
<table runat="server" >
<tr runat="server" >
<td colspan="2" runat="server" > </td>
<td>ID</td>
<td>Category Name</td>
<td>Description</td>
</tr>
<tr id="itemplaceholder" runat="server" ></tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server" >
<td runat="server"><asp:ImageButton ID="EditButton" runat="server" CommandName="Edit" ImageUrl="App_Themes/modify.png" /></td>
<td runat="server"><asp:ImageButton ID="DeleteButtonTrigger" runat="server" CommandName="Delete" ImageUrl="App_Themes/bin.png" /></td>
<td runat="server"> <%#Eval("CategoryID")%></td>
<td runat="server"> <%#Eval("CategoryName")%></td>
<td runat="server"> <%#Eval("Description")%></td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr runat="server" >
<td> </td>
<td> </td>
<td> <%#Eval("CategoryID")%></td>
<td> <%#Eval("CategoryName")%></td>
<td> <%#Eval("Description")%></td>
</tr>
<tr>
<td colspan="5">
<table>
<tr>
<td>ID : </td>
<td>
<asp:TextBox ID="txtEditCategoryID" runat="server" Text='<%# Bind("CategoryID") %>' Enabled="False"/>
</td>
</tr>
<tr>
<td>Category Name : </td>
<td>
<asp:TextBox ID="txtEditCategoryName" runat="server" Text='<%# Bind("CategoryName") %>' EnableViewState="False" />
</td>
</tr>
<tr>
<td>Description : </td>
<td><asp:TextBox ID="txtEditDescription" runat="server" Text='<%# Bind("Description") %>' Width="450" /></td>
</tr>
</table>
<asp:ImageButton ID="UpdateButton" runat="server" CommandName="Update" AlternateText="Update" ImageUrl="App_Themes/Images/apply.png" />
<asp:ImageButton ID="CancelButton" runat="server" CommandName="Cancel" AlternateText="Cancel" ImageUrl="App_Themes/Images/cancel.png" CausesValidation="false" />
</td>
</tr>
</EditItemTemplate>
</asp:ListView>
</form>
</body>
</html>
------------------------------------------
Code Behind
-----------------------------------------
Partial Class Default2
Inherits System.Web.UI.Page
Protected Sub lvCategories_ItemEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewEditEventArgs) Handles lvCategories.ItemEditing
Dim btn As ImageButton = lvCategories.FindControl("deletebuttontrigger")
btn.Enabled = False
End Sub
End Class
---------------------------------------------------
รบกวนช่วยด้วยครับ ขอบคุณครับ
Tag : - - - -
|
|
 |
 |
 |
 |
Date :
2010-03-06 00:03:33 |
By :
bigO |
View :
1495 |
Reply :
2 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<%@ Page Language="VB" %>
<script runat="server">
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
Sub Page_Load(sender As Object, e As EventArgs)
Dim strConnString As String
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("database/mydatabase.mdb")&";"
objConn = New OleDbConnection(strConnString)
objConn.Open()
IF NOT Page.IsPostBack() Then
BindData()
End IF
End Sub
Sub BindData()
Dim strSQL As String
strSQL = "SELECT * FROM customer"
Dim dtReader As OleDbDataReader
objCmd = New OleDbCommand(strSQL, objConn)
dtReader = objCmd.ExecuteReader()
'*** BindData to ListView ***'
myListView.DataSource = dtReader
myListView.DataBind()
dtReader.Close()
dtReader = Nothing
End Sub
Protected Sub myListView_ItemDataBound(ByVal sender As Object, ByVal e As ListViewItemEventArgs) Handles myListView.ItemDataBound
Dim lvDataItem As ListViewDataItem = CType(e.Item, ListViewDataItem)
'*** CustomerID ***'
Dim lblCustomerID As Label = CType(e.Item.FindControl("lblCustomerID"),Label)
IF Not IsNothing(lblCustomerID) Then
lblCustomerID.Text = lvDataItem.DataItem("CustomerID")
End IF
'*** Name ***'
Dim lblName As Label = CType(e.Item.FindControl("lblName"),Label)
IF Not IsNothing(lblName) Then
lblName.Text = lvDataItem.DataItem("CustomerID")
End IF
'*** Email ***'
Dim lblEmail As Label = CType(e.Item.FindControl("lblEmail"),Label)
IF Not IsNothing(lblEmail) Then
lblEmail.Text = lvDataItem.DataItem("Email")
End IF
'*** CountryCode ***'
Dim lblCountryCode As Label = CType(e.Item.FindControl("lblCountryCode"),Label)
IF Not IsNothing(lblCountryCode) Then
lblCountryCode.Text = lvDataItem.DataItem("CountryCode")
End IF
'*** Budget ***'
Dim lblBudget As Label = CType(e.Item.FindControl("lblBudget"),Label)
IF Not IsNothing(lblBudget) Then
lblBudget.Text = lvDataItem.DataItem("Budget")
End IF
'*** Used ***'
Dim lblUsed As Label = CType(e.Item.FindControl("lblUsed"),Label)
IF Not IsNothing(lblUsed) Then
lblUsed.Text = lvDataItem.DataItem("Used")
End IF
End Sub
Sub Page_UnLoad()
objConn.Close()
objConn = Nothing
End Sub
Sub Button1_Click(sender As Object, e As EventArgs)
Dim chkCusID As CheckBox
Dim lblID As Label
Dim i As Integer
lblText.Text = ""
For i = 0 To myListView.Items.Count - 1
chkCusID = myListView.Items(i).FindControl("chkCustomerID")
lblID = myListView.Items(i).FindControl("lblCustomerID")
IF chkCusID.Checked = True Then
'*** Have lblID.Text ***'
Me.lblText.Text = Me.lblText.Text & "<br>" & lblID.Text
End IF
Next
End Sub
</script>
<html>
<head>
<title>ThaiCreate.Com ASP.NET - ListView</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ListView ID="myListView" runat="server" DataKeyNames="CustomerID">
<LayoutTemplate>
<table>
<tr>
<td>
<table runat="server" border="1">
<tr>
<th runat="server">
Select</th>
<th runat="server">
CustomerID</th>
<th runat="server">
Name</th>
<th runat="server">
Email</th>
<th runat="server">
CountryCode</th>
<th runat="server">
Budget</th>
<th runat="server">
Used</th>
</tr>
<tr ID="itemPlaceholder" runat="server">
</tr>
</table>
</td>
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox id="chkCustomerID" runat="server"/>
</td>
<td>
<asp:Label ID="lblCustomerID" runat="server"/>
</td>
<td>
<asp:Label ID="lblName" runat="server"/>
</td>
<td>
<asp:Label ID="lblEmail" runat="server"/>
</td>
<td>
<asp:Label ID="lblCountryCode" runat="server" />
</td>
<td>
<asp:Label ID="lblBudget" runat="server" />
</td>
<td>
<asp:Label ID="lblUsed" runat="server" />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<br />
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Submit"></asp:Button>
<hr />
<asp:Label id="lblText" runat="server"></asp:Label>
</form>
</body>
</html>
ASP.NET ListView Control - FindControl
|
 |
 |
 |
 |
Date :
2010-03-06 08:35:08 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับ
จากโค้ดตัวอย่างที่ให้มา ผมเอามาวิเคราะห์แก้ปัญหา จนสามารถทำได้ตามที่ต้องการแล้วครับ
ขอบคุณมากๆๆๆๆ อีกครั้งครับ
|
 |
 |
 |
 |
Date :
2010-03-07 01:08:36 |
By :
bigO |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|