2016-08-19 5 views
0

Я создаю таблицу непосредственно из набора записей ADO, используя field.name и field.value. Как видно из другого предыдущего сообщения Retrieve ADO Recordset Field names (Classic ASP).
Сделав еще один шаг, я пытаюсь переименовать заголовки таблиц на основе значений из другой базы данных. По существу, если th = Column_1, то напишите «Имя» и т. Д.Создать функцию с помощью ASP ASP.NET ASP.NET?

Я могу сделать это индивидуально с помощью функции «если есть» с определенным кодом. Тем не менее, у меня есть другая база данных, которая имеет все правильные названия заголовков и скорее будет использовать цикл while через набор записей. Вместо написания каждой строки - columnheading1 = x и columnheading2 = y и т. Д. Я предпочел бы создать цикл while.

Снова сингл "if then" работает нормально, как указано ниже в коде, но в наборе записей нет.
Я попытался исправить набор записей и цикл, но ничего хорошего. Любые идеи, почему цикл while (или область повтора) не будет работать в этой функции?

Ниже приведен пример:

<table> 
     <thead> 
      <tr> 

    <% 
    Function Header_Name_Sub(Header_NameX) 
    Header_Name_Write = Header_NameX 
    If Header_Name_Write = "Project_File_ID" Then 
    Header_Name_Write = "File ID" ' this works great. 
    End If 
    If Header_Name_Write = "Project_Assignment_Name" Then 
    Header_Name_Write = "Project Name" ' this works great. 
    End If 

    ' Have a data base of all header names based on column name ... this repeat is not working in the function. If I pull it out this section works fine elsewhere in the page... 
Do While Not RS_Build_Numeric_Names.EOF 
    If CStr(Header_Name_Write) = CStr((RS_Header.Fields.Item("True_Column_Name").Value)) Then ' thought maybe string issue is why CStr 
    Header_Name_Write = (RS_Build_Numeric_Names.Fields.Item("Fixed_Column_Name").Value 
    End If 
Loop 

    If Header_Name_Write = "Project_City" Then 
    Header_Name_Write = "City" ' this works great. 
    End If 
    End Function 
    %>  

      <%For Each fld in RS.Fields%> 
      <% 
      Header_Name_Sub(fld.Name) 
      %> 
    <th><span><%=Header_Name_Write%></span></th> 
      <%Next %> 
      </tr> 
     </thead> 
     <tbody> 
    <% 
     Do Until RS.EOF 
      OutputRow RS.Fields 
      RS.MoveNext 
     Loop 
    %> 
     </tbody> 
    </table> 
    <% 
    Sub OutputRow(fields) 
    %> 
      <tr> 
      <%For Each fld in fields%> 
       <td><span><%=(fld.Value)%></span></td> 
      <%Next %> 
      </tr> 
    <% 
    End Sub 
    %> 

Так вот редактировать в простой форме, я просто понял. Внутри функции ...

If Header_Name_Write = "Project_File_ID" Then 
Header_Name_Write = "File ID" ' this works great. 
End If 

Работы великолепно выше. Я пытался использовать цикл while, чтобы написать 50+ дополнительных «If Then's», когда вместо этого он просто перебирался. Итак, как я могу написать в функции дополнительные?

If x = 1 Then Header_Name_Write = "File ID" End If 
If x = 2 Then Header_Name_Write = "Next Header" End If 
If x = 3 Then Header_Name_Write = "Another Header" End If 

Действительно ли это для цикла?

Чуть дальше ...

For Each fld in RS_Build_Numeric_Names.Fields 
If Header_Confirm = (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Column_Name").Value) Then 
Header_Name_Write = (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Name").Value) 
End If 
Next 

Если я использую для даного это делает работу для первой записи только в ... не записях всей петли.

+0

Должен ли я использовать Server.CreateObject ("Scripting.Dictionary")? – Brewy

ответ

0

с Header_Name_Sub() - это функция, вы должны фактически вернуть ее правильно, вместо использования переменной Header_Name_Write. Ожидается, что в вашем коде Header_Name_Write будет глобальной переменной, но поскольку вы не заявляете, что явно используете оператор DIM, может возникнуть неожиданный результат.

Вы должны попробовать вместо ниже:

<% 
    Function Header_Name_Sub(Header_NameX) 
    Dim Header_Name_Write '' make it local here 
    Header_Name_Write = Header_NameX 
    . 
    . 
    . 
    . 
    Header_Name_Sub = Header_Name_Write '' assign the local value and return it 
    End Function 

    For Each fld in RS.Fields 
    %><th><span><%=Header_Name_Sub(fld.Name)%></span></th><% 
    Next 
. 
. 
. 
+0

Спасибо, что ответ вернулся, и я согласен, что тоже помогает очистить код. Все еще не удается получить время, чтобы вернуть заголовки. Все еще пытаюсь! – Brewy

+0

Просто я понял, почему цикл не работает. Потому что он сохраняет переопределение значения в цикле. Doooop! Я хочу, чтобы цикл записывал в функцию все необходимые инструкции «if then» ... не заменяя значение. Как я могу это сделать? – Brewy

0

Фигурные это 99% из. Правильно использовал словарь скриптов для определения имен заголовков.

<table border="1px"> 
    <thead> 
     <tr> 

<% 
Set Header_Options_All = Server.CreateObject("Scripting.Dictionary") 
Do While Not RS_Header_Options_2.eof 'one RS Loop 
    Header_Options_All.Add (RS_Header_Options_2.Fields.Item("Build_Project_Drop_Column_Name").Value), (RS_Header_Options_2.Fields.Item("Build_Project_Drop_Option_Name").Value) 
    RS_Header_Options_2.movenext 
Loop 
Do While Not RS_Build_Numeric_Names.eof 'Another RS Loop 
    Header_Options_All.Add (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Column_Name").Value), (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Name").Value) 
    RS_Build_Numeric_Names.movenext 
Loop 
Header_Options_All.Add "Project_File_ID", "File ID" 'singles I added 
Header_Options_All.Add "Project_ID", "ID" 
Header_Options_All.Add "Project_Assignment_Name", "Project Name" 
Header_Options_All.Add "Project_City", "City" 
%> 

<% 
Function Header_Name_Sub(Header_NameX) 
Dim Header_Name_Write 
Dim Header_Confirm 
Header_Name_Write = Header_NameX 
Header_Confirm = Header_NameX 
For Each elem In Header_Options_All 
Header_Name_Write = Header_Options_All.Item(Header_Confirm) 
Next 
Header_Name_Sub = Header_Name_Write 
End Function 
%>  

     <%For Each fld in RS_Full_List_Building_Inner_Join.Fields%> 
<th><span><%=Header_Name_Sub(fld.Name)%></span></th> 
     <%Next %> 
     </tr> 
    </thead> 

Сейчас я просто не могу получить другие для заполнения. Значение, если оно не совпадает с именем я хочу имя по умолчанию. Достаточно близко!

0

Просто я понял, почему цикл не будет работать. Потому что он сохраняет переопределение значения в цикле. Doooop! Я хочу, чтобы цикл записывал в функцию все необходимые инструкции «if then» ... не заменяя значение. Как я могу это сделать? -

переменная = переменная & "новые данные"

Смежные вопросы