2013-07-22 7 views
0

я следующий код в GridView:Ошибки при привязке данных к сетке

<% If Eval("LabelType").ToString() = "Singleline" Then%> <asp:TextBox ID="txtSingleLine" runat="server" ></asp:TextBox> <% End If%> 
<% If Eval("LabelType").ToString() = "Multiline" Then%> <asp:TextBox ID="txtMultiline" runat="server" TextMode="MultiLine" ></asp:TextBox> <% End If%>            
    <% If Eval("LabelType").ToString() = "Image" Then%> <asp:FileUpload ID="FileUpload1" runat="server" /> <% End If%> 

Я получаю следующее сообщение об ошибке:

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control

С this вопроса я узнал, что # должны быть добавлено, но когда я добавил как:

Это не принималось (показывая синюю линию под целым заявлением).

Пожалуйста, сообщите мне, где я делаю ошибку.

Пожалуйста, помогите мне.

Я использую vb.net, но ответ в C# также полезен.

+0

@KevinKunderman я уже говорил об этом в моем вопросе, что я haqve refered этот вопрос –

+0

Вы можете добавить разметку для всей сетки –

ответ

1

Вы можете попробовать установить видимость на каждый элементе управления на основе стоимости LabelType как так:

<asp:TextBox ID="txtSingleLine" runat="server" Visible="<%# Eval("LabelType").ToString() == "Singleline" %>"></asp:TextBox> 
<asp:TextBox ID="txtMultiline" runat="server" TextMode="MultiLine" Visible="<%# Eval("LabelType").ToString() == "Multiline" %>" ></asp:TextBox> 
<asp:FileUpload ID="FileUpload1" runat="server" Visible="<%# Eval("LabelType").ToString() == "Image" %>" /> 
+0

Thanx, это самый простой способ :) –

+0

, но это всегда показывает мне одно текстовое поле строки, независимо от того, какой бы ни это текст. например. если его многострочный, он показывает мне одну строку + многострочную, если ее изображение показывает мне одну строку + загрузчик изображений –

+0

Странно, разместите разметку для gridview, а также код, который заполняет ее. – Riv

1

Как ошибка говорит, что вы не можете иметь Eval за пределы данных, связанных контроль, поэтому я бы рекомендовал вам динамически вставлять элементы управления в PlaceHolder управления, как это:

Markup:

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 

Code-за:

If LabelType = "Singleline" Then 
    ' Create textbox and add to placeholder 
    Dim textbox = New TextBox() 
    textbox.ID = "txtSingleLine" 
    PlaceHolder1.Controls.Add(textbox) 
Else If LabelType = "Multiline" Then 
    ' Create textbox with multi-line text mode and add to placeholder 
    Dim multilinetextbox = New TextBox() 
    multilinetextbox.ID = "txtMultiline" 
    PlaceHolder1.Controls.Add(multilinetextbox) 
Else If LabelType = "Image" Then 
    ' Create file upload and add to placeholder 
    Dim fileupload = New FileUpload() 
    fileupload.ID = "FileUpload1" 
    PlaceHolder1.Controls.Add(fileupload) 
End If 

Примечание: LabelType в приведенном выше коде является строковое представление о том, что вы делали в Eval("LabelType").ToString().