Манипулировать значениями базы данных в управлении данными?ASP.NET Webforms - PullRequest
2 голосов
/ 26 августа 2010

Я работаю над следующей разметкой внутри элемента управления DataBound в ASP.NET Webforms.

<asp:TemplateField HeaderText="DomainID">
    <ItemTemplate>
        <%  for (int i = 0; i < 10; i++)
            {%>
            <%#Eval("DomainID"); %>
            <%  ++i;
            } %>
        </ItemTemplate>
</asp:TemplateField>

Можно ли фактически писать блоки кода внутри раздела <%#Eval("DomainID"); %>, например:

<%# var x = Eval("DomainID"); if ((int)x)>0){//print this}   %>

1 Ответ

2 голосов
/ 26 августа 2010

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

Пример:

<asp:TemplateField HeaderText="DomainID"> 
    <ItemTemplate> 
        <asp:Literal ID="ltDomainID" runat="server" 
            OnDataBinding="ltDomainID_DataBinding" />
    </ItemTemplate>

Затем в вашей кодовой привязке реализуйте OnDataBinding:

protected void ltDomainID_DataBinding(object sender, System.EventArgs e)
{
    Literal lt = (Literal)(sender);
    for (int i = 0; i < 10; i++) 
    {
        var x = (int)(Eval("DomainID"));
        if (x > 0)
        {
            lt.Text += x.ToString();
        }
        ++i; 
    }
}

Я мог бы немного испортить вашу логику, но это должно дать вам основную идею. Внедрение логической серверной части делает вас более чистым в aspx и связывает логику непосредственно с выходным управлением (в данном случае это Literal).

...