Как назначить типы данных для DropDownList, ограниченного списком элементов

У меня есть DropDownList, связанный со списком элементов из SqlDatasource. Список элементов в DropDownList ограничен на основе следующего запроса

ВЫБЕРИТЕ COLUMN_NAMES FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'RESULT')

Мое требование: как назначить несколько типов данных для этих элементов DropDownList, т. Е. Несколько индексов в списке элементов должны быть сгруппированы как десятичный тип данных, а несколько индексов - как Varchar, DateTime Dataypes.

Я хотел бы создать элементы управления Dynamic Web на основе типа данных ввода DDL и соответствующего DropDownList_SelectedIndexChanged(). Мой SQL-запрос:

SELECT COLUMN_NAME, DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='RESULT' group by DATA_TYPE,COLUMN_NAME

Выход:

COLUMN_NAME  DATA_TYPE  

a            decimal
b            decimal
c            decimal
d            int
e            int
f            varchar
g            varchar
h            varchar
i            varchar
j            varchar

Если a или b или c выбраны из DDL, мне нужно сгенерировать уникальные динамические веб-элементы управления для типа данных Decimal SelectedIndexValue.

Как действовать?

Мой код aspx:

<asp:Panel ID="Panel5" runat="server" Height="221px">
        <span style="font-size: 135%; font-family: Verdana; font-weight: bold"> Search Functionalities </span>
        <asp:DropDownList ID="DropDownList5" runat="server" DataSourceID="column_list_for_filter" DataTextField="All_Columns" DataValueField="All_Columns" OnSelectedIndexChanged ="DropDownList5_SelectedIndexChanged"  AutoPostBack="true">
        </asp:DropDownList>
        <asp:SqlDataSource ID="column_list_for_filter" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString %>" SelectCommand="SELECT COLUMN_NAME 'All_Columns' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='RESULT'  "></asp:SqlDataSource>
        <asp:Button ID="Button1" runat="server" Font-Bold="True" Font-Names="Arial" Font-Size="Small" OnClick="Button1_Click" Text="Search Flow Periods" Width="144px" />
        <asp:Table ID="dynamic_filter_table" runat="server" ToolTip="Results">
        </asp:Table>
</asp:Panel>

Код C#:

  protected void DropDownList5_SelectedIndexChanged(object sender, EventArgs e)
     {
         if(DropDownList5.SelectedIndex.Equals(typeof(Decimal)))
         {
            createdynamiccontrols();
         }
         else if (DropDownList5.SelectedIndex.Equals(typeof(DateTime)))
         {
             //Create Unique Web Controls
         }

         else if (DropDownList5.SelectedIndex.Equals(typeof(Char)))
         {
             //Create Unique Web Controls
         }
     }

3 ответа

Решение

Метод equals сделает сравнение уровня объекта. Это означает, что он проверит, являются ли оба объекта одинаковыми или нет. В твоем случае DropDownList5.SelectedIndex дам int объект, с которым вы сравниваете typeof другой объект, который всегда будет возвращать false, если только typeof является int,

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

<asp:DropDownList ID="DropDownList5" runat="server" DataSourceID="column_list_for_filter" DataTextField="COLUMN_NAME" DataValueField="DATA_TYPE" OnSelectedIndexChanged ="DropDownList5_SelectedIndexChanged"  AutoPostBack="true">
        </asp:DropDownList>

Тогда вы получите DataType колонны в DropDownList5.SelectedValue, который является string, Затем вы можете добавить элементы управления на основе DropDownList выбор путем сравнения SelectedValue с string имя DataType, Как,

protected void DropDownList5_SelectedIndexChanged(object sender, EventArgs e)
{
    if(DropDownList5.SelectedValue == "decimal")
    {
        TextBox1.Text = dr.GetString(0);
    }
    else if(DropDownList5.SelectedValue == "int")
    { 
        Label1.Text = dr.GetString(0);
    }
    else if(DropDownList5.SelectedValue == "varchar")
    {
        Button1.Text = dr.GetString(0);
    }
}

Правильное решение:

Если "e" выбрано из следующего "DropDownList", значение, сохраненное в "DropDownList", равно "e"

COLUMN_NAME  DATA_TYPE  
a            decimal
b            decimal
c            decimal
d            int
e            int
f            varchar
g            varchar  
h            varchar
i            varchar
j            varchar

Источник: DropDownList с повторяющимися полями значений данных. OnSelected запутывается и выбирает первое, почему?

Aspx код:

<asp:DropDownList ID="DropDownList5" runat="server"  AutoPostBack="true" OnSelectedIndexChanged ="DropDownList5_SelectedIndexChanged" DataSourceID="column_list_for_filter">
</asp:DropDownList>                           

<asp:SqlDataSource ID="column_list_for_filter" runat="server">
</asp:SqlDataSource>

Код C#:

protected void Page_Load(object sender, EventArgs e)
    {      
        if (!IsPostBack)
        {
            BindDropDownLists();
        }

        else
        {
            if (!String.IsNullOrEmpty(DropDownList5.SelectedValue))
            {
                if (DropDownList5.SelectedValue.Contains("decimal"))
                {
                    createdynamiccontrols_decimal();
                }

                else if (DropDownList5.SelectedValue.Contains("varchar"))
                {
                    createdynamiccontrols_varchar();
                }
                else if (DropDownList5.SelectedValue.Contains("datetime"))
                {
                    create_cntrls();
                }

                else if (DropDownList5.SelectedValue.Contains("int"))
                {
                    Create();
                }


            }

        }
    }

private void BindDropDownLists()
     {
         column_list_for_filter.ConnectionString = connection;
         column_list_for_filter.SelectCommand = "SELECT DATA_TYPE + '_' + convert(varchar(10), ROW_NUMBER() OVER(ORDER BY DATA_TYPE))as DATA_TYPE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'RESULT' AND COLUMN_NAME IN ('a','b','c','d','e','f','g','h','i'))";
         DropDownList5.DataTextField = "COLUMN_NAME";
         DropDownList5.DataValueField = "DATA_TYPE";
         DropDownList5.DataBind();

     }

Я предполагаю, что ваш сценарий таким образом. Вам нужно классифицировать значения column_name на основе типа данных, после того как выбранные значения будут отображаться в уникальных веб-элементах управления, верно? Если так, попробуйте эту строку кода в событии dropdwon selectchange.

SqlConnection con=new Sqlconnenction("Your Connection String");
con.Open();
Sqlcommand cmd = new SqlCommand("Select * from your database",con); // Your two columns
SqlDateReader dr=cmd.ExecuteReader();
while(dr.Read())
{
  if(dr.GetString(1) == "decimal") // dr.GetString(1) = 'Your Second Column'
  {
    TextBox1.Text = dr.GetString(0);
  }
  else if(dr.GetString(1)=="int")
  {
    Label1.Text = dr.GetString(0);
  }
  else if(dr.GetString(1)=="varchar")
  {
    Button1.Text = dr.GetString(0);
  }
}
con.Close();

Дайте мне знать, если я вас запутал.

Другие вопросы по тегам