It seems you were trying to convert True and False to strings, when you needed to keep them as boolean values. That might be your first problem. Edit: After some investigastion, there doesn't seem to be any way, in VB or C#, to use anything other than databinding to affect control properties.
Unfortunately, ASP.NET doesn't provide a way to assign values to the parameters of controls using this inline syntax. The workaround is to use databinding syntax (which is intended only to be used inside of data-bound controls). You can use <%xxx%> to insert code into your page (for example, your IIF statement, or general If statement or method calls). You can use <%=xxx%> as a shortcut for <%Response.Write(xxx)%> (basically, it will write it to the page as a string). Unfortunately, so far as I know, neither of those "standard" methods of inserting code into your page can be used to effect control properties.
So, the reason that you have to call DataBind is that you're using a hack because ASP.NET doesn't seem to provide what you're wanting. Though you can, of course, always do the same thing in your code behind without any problem ("control.Visible = IsEditable").
Hope that helps you understand some more.