• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 675
  • Last Modified:

Could not find control - in ControlParameter -

Hello All

I have a repeater with controls, some draw from different SqlDatasources.

Everything loads up properly, I click my update button and then I get the error:

"Could not find control 'txtProjectName' in ControlParameter 'projectName'"

The Control txtProjectName is in the repeater <itemTemplate>

<asp:TextBox ID="txtProjectName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "projectName") %>' />

My Datasource that I want to update looks like this:
  <asp:SqlDataSource ID="dsEditProject" runat="server" ConnectionString="<%$ ConnectionStrings:webtoolConn %>" >
    <UpdateParameters>
        <asp:ControlParameter ControlID="txtProjectName" PropertyName="Textbox.Text" Name="projectName" Type="String" />
    </UpdateParameters>

My code behind looks like this:

Protected Sub rptEditProject_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rptEditProject.ItemCommand

Dim projectId As String = Request.QueryString("projectId")

dsEditProject.UpdateCommand = "UPDATE [projects] SET [projectName] = @projectName WHERE [projectId] = " & projectId & ";"

dsEditProject.Update()



End Sub

It gets to the dsEditProject.Update and errors saying it can't find the control. If I hard code the "@projectName" in the update command everything works. It just isn't setting the parameterControl to what is in the textbox.

Also, if I set the parameter with asp:parameter it will put in whatever I put as the default.



How do I get the controlParameter to grab what is in txtProjectName?



Many thanks

Don
0
donaldcroswell
Asked:
donaldcroswell
  • 2
  • 2
1 Solution
 
SammyCommented:
change
        <asp:ControlParameter ControlID="txtProjectName" PropertyName="Textbox.Text" Name="projectName" Type="String" />
To
        <asp:ControlParameter ControlID="txtProjectName" PropertyName="Text" Name="projectName" Type="String" />

HTH
0
 
bele04Commented:
since your textbox is inside your repeater tendency is that when .NET generates the html code for that it's client ID is changed to something like "Repeater1$ctl##$txtProjectName" (the ## dpends on what row of the control you're editing...ie. row2 = Repeater1$ctl02$txtProjectName) that's why it can't find the textbox when it looks for the source of the controlparameter.  

I suggest you just make it a parameter but if you insist on making it a controlparameter then you'll have to set a defaultvalue for it on your codebehind still and just assign the controlID to another control that it can find so it doesn't return an error.  Up to now I still haven't found a way yet to dynamically assign a control to a controlparameter when it's inside a control like a datagrid or repeater and etc...
0
 
donaldcroswellAuthor Commented:
so how do I set the value of the parameter to be the value in the box?

<asp:Parameter Name="projectName" Type="String" />
0
 
bele04Commented:
you can set it in your before you call the update method of your sqldatasource...something like this:

[ASPX File]
...
<UpdateParameters>
        <asp:Parameter Name="projectName" Type="String" />
    </UpdateParameters>
...

[code behind]

Protected Sub rptEditProject_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rptEditProject.ItemCommand

Dim projectId As String = Request.QueryString("projectId")

dsEditProject.UpdateCommand = "UPDATE [projects] SET [projectName] = @projectName WHERE [projectId] = " & projectId & ";"
dsEditProject.UpdateParameters("projectName").DefaultValue = CType(Repeater1.Items(e.Item.ItemIndex).FindControl("txtProjectName"), TextBox).Text
dsEditProject.Update()

End Sub
0
 
donaldcroswellAuthor Commented:
Thanks! that worked great.

Actually the e.Item.ItemIndex gave me a out of range error but I just put in "0" as it only returns one row and that worked.

Cheerios!
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now