Hallo,
ich habe mir ein flexibeles Datagrid zusammengebaut. Zuerst mal was
funktioniert:
- Edit, Cancel,Delete-Spalte
- Checkbox zum Selektieren und das Schreiben der selektierten Zeilen in eine
neue Tabelle
- Zugriff auf einen Button in der Fusszeile
- Hinzufuegen einer neuen Zeile im Datagrid
Was bis jetzt nicht funktioniert:
Ich moechte die spalten des Datagrids auch flexibel gestalten. Darum habe
ich eine Spalte wie z.B.
<asp:BoundColumn DataField="aaa" HeaderText="AAA-Column"></asp:BoundColumn>
ersetzt durch
<asp:TemplateColumn HeaderText="AAA-Column"> <ITEMTEMPLATE> <%#
DataBinder.Eval(Container.DataItem, getaaa()) %></ITEMTEMPLATE></asp:TemplateColumn>
und im Code behinde:
Public Function getaaa() As String
Return "aaa"
End Function
Was jetzt nicht mehr funktioniert ist der Zugriff auf die Werte des
Datagrids z.B. mit
(CType(E.Item.Cells(2).Controls(0), TextBox)).Text
Hat jemad dazu eine Idee. Ich stecke hier midestens schon zwei Tage total
fest. Der komplette Code folgt :-)
Danke im Voraus!!!
***Kompletter Code***
webform3.aspx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm3.aspx.vb"
Inherits="eprocurement.WebForm3"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body >
<form id="Form1" method="post" runat="server">
<asp:button id="btnArticleSearch" runat="server" Text="Search Article "
Height="24px" Width="156px"></asp:button>
<asp:textbox id="tbSearch" runat="server"></asp:textbox>
<asp:label id="lblArticleSelect" runat="server" Height="19px"
Width="412px"></asp:label>
<asp:datagrid id="dgArticleSelect" runat="server" Height="100px"
Width="177px"
AutoGenerateColumns="False"
DataKeyField="ID"
OnDeleteCommand="ArticleDelete"
OnUpdateCommand="ArticleUpdate"
OnCancelCommand="ArticleCancel"
OnItemCommand="Item"
OnEditCommand="ArticleEdit"
ShowFooter="True">
<Columns>
<asp:TemplateColumn
HeaderText="SELECT">
<ItemTemplate>
<asp:CheckBox
id="cbSelectBox" runat="server" Checked="False"
AutoPostBack="False"></asp:CheckBox>
</ItemTemplate>
<FooterTemplate>
<asp:Button
id="submitSelection" CommandName="Submit" Text="Submit
Selection" runat="server"></asp:Button>
<asp:Button
id="newArticle" CommandName="newArticle" Text="New
Article" runat="server"></asp:Button>
</FooterTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="ID"
ReadOnly="True"
HeaderText="ID"></asp:BoundColumn>
<asp:TemplateColumn
HeaderText="AAA-Column">
<ITEMTEMPLATE>
<%#
DataBinder.Eval(Container.DataItem, getaaa()) %>
</ITEMTEMPLATE>
</asp:TemplateColumn>
<asp:BoundColumn DataField="bbb"
HeaderText="BBB-Column"></asp:BoundColumn>
<asp:BoundColumn DataField="ccc"
HeaderText="Column-CCC"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="EDIT">
<ItemTemplate>
<asp:Button
id="btnArticleEdit" runat="server" Text="Edit"
CommandName="Edit"></asp:Button>
</ItemTemplate>
<EditItemTemplate>
<ASP:Button
id="btnArticleUpdate" runat="server" Text="Write"
CommandName="Update"></ASP:Button>
<ASP:Button
id="btnArticleDelete" runat="server" Text="Delete"
CommandName="Delete"></ASP:Button>
<ASP:Button
id="btnArticleCancel" runat="server" Text="Cancel"
CommandName="Cancel"></ASP:Button>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
</form>
</body>
</HTML>
zugeh�rige webform3aspx.vb
Public Class WebForm3
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Protected WithEvents btnArticleSearch As
System.Web.UI.WebControls.Button
Protected WithEvents btnArticleNew As System.Web.UI.WebControls.Button
Protected WithEvents btnArticleSubmitSelection As
System.Web.UI.WebControls.Button
Protected WithEvents btnArticleNewRow As
System.Web.UI.WebControls.Button
Protected WithEvents tbSearch As System.Web.UI.WebControls.TextBox
Protected WithEvents lblArticleSelect As System.Web.UI.WebControls.Label
Protected WithEvents dgArticleSelect As
System.Web.UI.WebControls.DataGrid
Protected WithEvents btnArticleSubmitNew As
System.Web.UI.WebControls.Button
Protected WithEvents lblArticleNewAaa As System.Web.UI.WebControls.Label
Protected WithEvents tbArticleNewAaa As
System.Web.UI.WebControls.TextBox
Protected WithEvents lblArticleNewBbb As System.Web.UI.WebControls.Label
Protected WithEvents tbArticleNewBbb As
System.Web.UI.WebControls.TextBox
Protected WithEvents lblArticleNewCcc As System.Web.UI.WebControls.Label
Protected WithEvents tbArticleNewCcc As
System.Web.UI.WebControls.TextBox
Protected WithEvents panArticleNew As System.Web.UI.WebControls.Panel
Dim btnArticleNewRowClick As Boolean = False
Dim sqlConn As New
SqlConnection(ConfigurationSettings.AppSettings("dbconn"))
Dim dsArticleSelect As New DataSet()
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
End If
End Sub
Sub dgArticleSelectDatabind()
Dim strArticleSelect As String = "SELECT * FROM xxx where aaa LIKE
'%" & tbSearch.Text & "%'"
Dim daArticleSelect As New SqlDataAdapter(strArticleSelect, sqlConn)
daArticleSelect.SelectCommand.Parameters.Add(New
SqlParameter("@tbSearch", SqlDbType.NVarChar, 50))
daArticleSelect.SelectCommand.Parameters("@tbSearch").Value =
tbSearch.Text
daArticleSelect.Fill(dsArticleSelect, "xxx")
dgArticleSelect.DataSource =
dsArticleSelect.Tables("xxx").DefaultView
dgArticleSelect.DataBind()
End Sub
Public Function getaaa() As String
Return "aaa"
End Function
Private Sub btnArticleSearch_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnArticleSearch.Click
dgArticleSelectDatabind()
dgArticleSelect.EditItemIndex = -1
End Sub
Sub ArticleEdit(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
lblArticleSelect.Text = ""
dgArticleSelect.EditItemIndex = CInt(E.Item.ItemIndex)
dgArticleSelectDatabind()
End Sub
Sub ArticleCancel(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
dgArticleSelect.EditItemIndex = -1
dgArticleSelectDatabind()
End Sub
Sub ArticleDelete(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
Dim cmd As New SqlCommand("deletexxx", sqlConn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@txtID", SqlDbType.NVarChar,
50))
cmd.Parameters("@txtId").Value =
dgArticleSelect.DataKeys(CInt(E.Item.ItemIndex))
sqlConn.Open()
cmd.ExecuteNonQuery()
sqlConn.Close()
dgArticleSelect.EditItemIndex = -1
dgArticleSelectDatabind()
lblArticleSelect.Text = "Article with ID = " & E.Item.Cells(1).Text
& " deleted!"
End Sub
Sub ArticleUpdate(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
If (CInt(dgArticleSelect.EditItemIndex) = 0) Then
Dim AddUserSqlCommand As New SqlCommand("insertxxx", sqlConn)
Dim AddArticleDatareader As SqlDataReader
Dim ArticleReturn As Integer
AddUserSqlCommand.CommandType = CommandType.StoredProcedure
AddUserSqlCommand.Parameters.Add(New SqlParameter("@txtaaa",
SqlDbType.NVarChar, 50, ParameterDirection.Input)).Value =
(CType(E.Item.Cells(2).Controls(0), TextBox)).Text
AddUserSqlCommand.Parameters.Add(New SqlParameter("@txtbbb",
SqlDbType.NVarChar, 50, ParameterDirection.Input)).Value =
(CType(E.Item.Cells(3).Controls(0), TextBox)).Text
AddUserSqlCommand.Parameters.Add(New SqlParameter("@txtccc",
SqlDbType.NVarChar, 50, ParameterDirection.Input)).Value =
(CType(E.Item.Cells(4).Controls(0), TextBox)).Text
AddUserSqlCommand.Parameters.Add(New SqlParameter("@myreturn",
SqlDbType.Int, 4, ParameterDirection.ReturnValue)).Value = -1
Try
sqlConn.Open()
AddArticleDatareader = AddUserSqlCommand.ExecuteReader()
ArticleReturn =
AddUserSqlCommand.Parameters("@myreturn").Value
If ArticleReturn = 0 Then
lblArticleSelect.Text = "Article alredy exists. Please
choose an other user name. "
Else
lblArticleSelect.Text = "New Article added. Number: " &
ArticleReturn
End If
AddArticleDatareader.Close()
Catch objerror As Exception
lblArticleSelect.Text = "A database error occured: " &
objerror.Message & objerror.Source
End Try
Else
Dim txtaaa As TextBox = E.Item.Cells(2).Controls(0)
Dim txtbbb As TextBox = E.Item.Cells(3).Controls(0)
Dim txtccc As TextBox = E.Item.Cells(4).Controls(0)
Dim cmd As New SqlCommand("updatexxx", sqlConn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@txtID", SqlDbType.Int))
cmd.Parameters.Add(New SqlParameter("@txtaaa",
SqlDbType.NVarChar, 50))
cmd.Parameters.Add(New SqlParameter("@txtbbb",
SqlDbType.NVarChar, 50))
cmd.Parameters.Add(New SqlParameter("@txtccc",
SqlDbType.NVarChar, 50))
cmd.Parameters("@txtId").Value =
dgArticleSelect.DataKeys(CInt(E.Item.ItemIndex))
cmd.Parameters("@txtaaa").Value = txtaaa.Text
cmd.Parameters("@txtbbb").Value = txtbbb.Text
cmd.Parameters("@txtccc").Value = txtccc.Text
sqlConn.Open()
cmd.ExecuteNonQuery()
lblArticleSelect.Text = "Article with ID = " &
dgArticleSelect.DataKeys(CInt(E.Item.ItemIndex)) & " updated!"
End If
sqlConn.Close()
dgArticleSelect.EditItemIndex = -1
dgArticleSelectDatabind()
End Sub
Sub Item(ByVal Sender As Object, ByVal E As DataGridCommandEventArgs)
If E.CommandName = "Submit" Then
Dim i As Integer
Dim cbSelection As CheckBox
sqlConn.Open()
For i = 0 To (dgArticleSelect.Items.Count - 1)
cbSelection =
CType(dgArticleSelect.Items(i).Cells(0).Controls(1), CheckBox)
If cbSelection.Checked = True Then
Dim cmd As New SqlCommand("insertxxx2yyy", sqlConn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@txtID",
SqlDbType.NVarChar, 50))
cmd.Parameters.Add(New SqlParameter("@txtaaa",
SqlDbType.NVarChar, 50))
cmd.Parameters.Add(New SqlParameter("@txtbbb",
SqlDbType.NVarChar, 50))
cmd.Parameters.Add(New SqlParameter("@txtccc",
SqlDbType.NVarChar, 50))
cmd.Parameters("@txtId").Value =
dgArticleSelect.Items(i).Cells(1).Text()
cmd.Parameters("@txtaaa").Value =
dgArticleSelect.Items(i).Cells(2).Text()
cmd.Parameters("@txtbbb").Value =
dgArticleSelect.Items(i).Cells(3).Text()
cmd.Parameters("@txtccc").Value =
dgArticleSelect.Items(i).Cells(4).Text()
cmd.ExecuteNonQuery()
cmd.Dispose()
End If
Next
sqlConn.Close()
dgArticleSelect.EditItemIndex = -1
dgArticleSelectDatabind()
End If
If E.CommandName = "newArticle" Then
Dim strArticleSelect As String = "SELECT * FROM xxx where aaa
LIKE '%" & tbSearch.Text & "%'"
Dim daArticleSelect As New SqlDataAdapter(strArticleSelect,
sqlConn)
daArticleSelect.SelectCommand.Parameters.Add(New
SqlParameter("@tbSearch", SqlDbType.NVarChar, 50))
daArticleSelect.SelectCommand.Parameters("@tbSearch").Value =
tbSearch.Text
daArticleSelect.Fill(dsArticleSelect, "xxx")
Dim BlankRow As DataRow = dsArticleSelect.Tables("xxx").NewRow()
dsArticleSelect.Tables("xxx").Rows.InsertAt(BlankRow, 0)
dgArticleSelect.DataSource =
dsArticleSelect.Tables("xxx").DefaultView
dgArticleSelect.EditItemIndex = 0
dgArticleSelect.DataBind()
End If
End Sub
End Class
--
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net
| [aspdedotnet] als [email protected] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp