Bonjour,

Je suis en train de créer un UserControl dont voici l'ascx :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="PivotTable.ascx.vb" Inherits="PAPAGEI.PivotTable" %>
<asp:ListView ID="ListView" runat="server" ItemPlaceholderID="PlaceHolder">
  <LayoutTemplate>
    <table> 
      <tbody> 
        <asp:PlaceHolder ID="Placeholder" runat="server"/>
      </tbody> 
    </table>
  </LayoutTemplate>
  <ItemTemplate>
    <tr>
      <asp:PlaceHolder ID="ItemPlaceHolder" runat="server" />
      <td>
        <asp:ImageButton ID="EditButton" runat="server" ImageUrl="~/App_Themes/Default/Images/Edit.png" CommandName="Edit"/>
      </td>
    </tr>
  </ItemTemplate>
  <EditItemTemplate>
    <tr>
      <asp:PlaceHolder ID="EditItemPlaceHolder" runat="server" />
      <td>
        <asp:ImageButton ID="UpdateButton" runat="Server" ImageUrl="~/App_Themes/Default/Images/Validate.png" CommandName="Update"/> 
        <asp:ImageButton ID="CancelButton" runat="Server" ImageUrl="~/App_Themes/Default/Images/Back.png" CommandName="Cancel" CausesValidation="false"/> 
      </td>
    </tr> 
  </EditItemTemplate>
  <InsertItemTemplate>
    <tr>
      <asp:PlaceHolder ID="InsertItemPlaceHolder" runat="server" />
      <td>
        <asp:ImageButton ID="InsertButton" runat="Server" ImageUrl="~/App_Themes/Default/Images/Validate.png" CommandName="Insert"/> 
      </td>
    </tr>
  </InsertItemTemplate>
</asp:ListView>
Voici le code behind associé (PivotTable.ascx.vb)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Imports System.ComponentModel
<DefaultProperty("SelectedValue")> _
Public Class PivotTable
  Inherits System.Web.UI.UserControl
 
  Private m_ItemTemplate As ITemplate = Nothing
  Private m_EditItemTemplate As ITemplate = Nothing
  Private m_InsertItemTemplate As ITemplate = Nothing
 
  <BrowsableAttribute(False)> _
  Public ReadOnly Property SelectedValue As Object
    Get
      Return ListView.SelectedValue
    End Get
  End Property
 
  <Category("Data")> _
  Public Property DataSourceID As String
    Get
      Return ListView.DataSourceID
    End Get
    Set(ByVal DataSourceID As String)
      ListView.DataSourceID = DataSourceID
    End Set
  End Property
 
  <TypeConverterAttribute(GetType(StringArrayConverter))> _
  <Category("Data")> _
  Public Overridable Property DataKeyNames As String()
    Get
      Return ListView.DataKeyNames
    End Get
    Set(ByVal DataKeyNames As String())
      ListView.DataKeyNames = DataKeyNames
    End Set
  End Property
 
  <Category("Misc")> _
  Public Property InsertItemPosition As InsertItemPosition
    Get
      Return ListView.InsertItemPosition
    End Get
    Set(ByVal InsertItemPosition As InsertItemPosition)
      ListView.InsertItemPosition = InsertItemPosition
    End Set
  End Property
 
  <BrowsableAttribute(False)> _
  <PersistenceModeAttribute(PersistenceMode.InnerProperty)> _
  <TemplateContainerAttribute(GetType(INamingContainer), BindingDirection.TwoWay)> _
  Public Property ItemTemplate() As ITemplate
    Get
      Return m_ItemTemplate
    End Get
    Set(ByVal Template As ITemplate)
      m_ItemTemplate = Template
    End Set
  End Property
 
  <BrowsableAttribute(False)> _
  <PersistenceModeAttribute(PersistenceMode.InnerProperty)> _
  <TemplateContainerAttribute(GetType(INamingContainer), BindingDirection.TwoWay)> _
  Public Property EditItemTemplate() As ITemplate
    Get
      Return m_EditItemTemplate
    End Get
    Set(ByVal Template As ITemplate)
      m_EditItemTemplate = Template
    End Set
  End Property
 
  <BrowsableAttribute(False)> _
  <PersistenceModeAttribute(PersistenceMode.InnerProperty)> _
  <TemplateContainerAttribute(GetType(INamingContainer), BindingDirection.TwoWay)> _
  Public Property InsertItemTemplate() As ITemplate
    Get
      Return m_InsertItemTemplate
    End Get
    Set(ByVal Template As ITemplate)
      m_InsertItemTemplate = Template
    End Set
  End Property
 
  Private Sub ListView_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles ListView.ItemCreated
    If Not ItemTemplate Is Nothing Then
      With e.Item
        If Not .FindControl("ItemPlaceHolder") Is Nothing Then
          ItemTemplate.InstantiateIn(.FindControl("ItemPlaceHolder"))
        End If
      End With
    End If
    If Not EditItemTemplate Is Nothing Then
      With e.Item
        If Not .FindControl("EditItemPlaceHolder") Is Nothing Then
          EditItemTemplate.InstantiateIn(.FindControl("EditItemPlaceHolder"))
        End If
      End With
    End If
    If Not InsertItemTemplate Is Nothing Then 
      With e.Item
        If Not .FindControl("InsertItemPlaceHolder") Is Nothing Then
          InsertItemTemplate.InstantiateIn(.FindControl("InsertItemPlaceHolder"))
        End If
      End With
    End If
  End Sub
 
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  End Sub
 
End Class
J'utilise ce User Control de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<%@ Register Src="~/Controls/PivotTable.ascx" TagName="PivotTable" TagPrefix="papagei" %>
<asp:SqlDataSource
  ID="SqlDataSourceCountries"
  runat="server"
  ConnectionString='<%$ ConnectionStrings:PAPAGEIConnectionString %>'
  SelectCommand=" 
SELECT [V_TEXT_TRANSLATION].TEXT_ID,
[V_TEXT_TRANSLATION].CODE
FROM [common].[L_COUNTRY] INNER JOIN [current].[V_TEXT_TRANSLATION]
ON [L_COUNTRY].[TEXT_ID] = [V_TEXT_TRANSLATION].[TEXT_ID]
WHERE [V_TEXT_TRANSLATION].[LANGUAGE] = @@LANGUAGE
ORDER BY [V_TEXT_TRANSLATION].[TEXT];
  "
  UpdateCommand=" 
UPDATE [current].[T_TEXT]
SET CODE = @CODE
WHERE TEXT_ID = @TEXT_ID;
  "
  InsertCommand=" 
DECLARE @TEXT_ID [uniqueidentifier];
SET @TEXT_ID = NEWID();
INSERT INTO [current].[T_TEXT]
( TEXT_ID, CODE )
VALUES
( @TEXT_ID, @CODE );
INSERT INTO [common].[L_COUNTRY]
( TEXT_ID )
VALUES
( @TEXT_ID );
  "
  ProviderName='<%$ ConnectionStrings:PAPAGEIConnectionString.ProviderName %>'>
  <UpdateParameters>
    <asp:Parameter Name="TEXT_ID" DbType="Guid" />
    <asp:Parameter Name="CODE" DbType="String" />
  </UpdateParameters>
  <InsertParameters>
    <asp:Parameter Name="CODE" DbType="String" />
  </InsertParameters>
</asp:SqlDataSource>
<papagei:PivotTable
  ID="PivotTable"
  runat="server"
  DataSourceID="SqlDataSourceCountries"
  DataKeyNames="TEXT_ID"
  InsertItemPosition="LastItem"
>
  <ItemTemplate>
    <td>
      <asp:Label ID="CodeLabel" runat="server" Text='<%#Eval("CODE")%>' />
    </td>
  </ItemTemplate>
  <EditItemTemplate>
    <td>
      <asp:TextBox ID="CodeTextBox2" runat="server" Text='<%#Bind("CODE")%>'/>
    </td>
  </EditItemTemplate>
  <InsertItemTemplate>
    <td>
      <asp:TextBox ID="CodeTextBox1" runat="server" Text='<%#Bind("CODE")%>' />
    </td>
  </InsertItemTemplate>
</papagei:PivotTable>
Lorsque je suis en affichage normal pas de soucis, le CODE s'affiche bien, par contre dès que je suis en mode édition (EditItemTemplate) ou en mode insertion (InsertItemTemplate) le code initial dans la TextBox est Ok mais lorsque je clique sur le bouton Update ou Insert une valeur Vide est transmise à la base de données, la valeur saisie dans la TextBox n'est pas transmise à la base : en conclusion l'Eval("CODE") - one way binding -fonctionne mais pas le Bind("CODE") -two way binding.

Quelqu'un peut-il m'aider ?