GrpSMK Ответов: 1

Как отобразить таблицу на основе выбора списка в MVC


Список, содержащий имена столбцов(динамическое изменение имени столбца на основе другого списка).Теперь, как дисплей формата таблица для списка столбцов используется в помощью MVC4.

Что я уже пробовал:

Я попробовал войти asp.net c# но мне нужно в mvc, здесь выпадающий элемент select - это имя таблицы.Этот же код мне нужен в mvc.
protected void Button2_Click(object sender, EventArgs e)
  {

      if (ListBox1.Items.Count > 0)
      {
          List<string> listbfrom = new List<string>();


          for (int i = 0; i < ListBox1.Items.Count; i++)
              if (ListBox1.Items[i].Selected)
                  listbfrom.Add(ListBox1.Items[i].Text);

          // string csv = string.Join(",", listbfrom);
          //string csv = string.Format("'{0}'", string.Join("','", listbfrom));
          string csv = string.Join(",", listbfrom.ToArray());
          string csv1 = DropDownList1.SelectedItem.Text;

          con.Open();

          string str = "SELECT "+csv+ " FROM  "+csv1;

          using (SqlCommand com = new SqlCommand(str, con))
          {
             // com.Parameters.AddWithValue("@listbfrom", csv);
            //  com.Parameters.AddWithValue("@tabfrom", DropDownList1.SelectedItem.Text);
              DataSet dsBooking = new DataSet();
              SqlDataAdapter dap = new SqlDataAdapter(com);

              dap.Fill(dsBooking);
              con.Close();


              GridView1.DataSource = dsBooking;
              GridView1.DataBind();
          }





          /* protected void Button2_Click(object sender, EventArgs e)
           {

               //ListBox1_SelectedIndexChanged(sender, e);
               if (ListBox1.Items.Count > 0)
               {

                   DataTable dt = new DataTable();


                   DataSet dsBooking = new DataSet();

                   for (int i = 0; i < ListBox1.Items.Count; i++)
                   {
                       if (ListBox1.Items[i].Selected)
                       {
                           string Listbfrom = ListBox1.Items[i].Text;







                           string str = "SELECT  " + Listbfrom + "  FROM  " + DropDownList1.SelectedItem.Text;

                           SqlCommand com = new SqlCommand(str, con);



                           SqlDataAdapter dap = new SqlDataAdapter(com);

                           dap.Fill(dsBooking);









                       }

                   }
                   GridView1.DataSource = dsBooking;

                   GridView1.DataBind();

               }



           }*/

          /* protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
           {
               if (ListBox1.Items.Count > 0)
               {

                   DataTable dt = new DataTable();

                   DataSet ds = new DataSet();

                   for (int i = 0; i < ListBox1.Items.Count; i++)
                   {
                       if (ListBox1.Items[i].Selected)
                       {
                           string Listbfrom = ListBox1.Items[i].Text;





                           con.Open();

                           string str = "SELECT  " + Listbfrom + "  FROM  " + DropDownList1.SelectedItem.Text;

                           SqlCommand com = new SqlCommand(str, con);

                           DataSet dsBooking = new DataSet();

                           SqlDataAdapter dap = new SqlDataAdapter(com);

                           dap.Fill(dsBooking);

                           con.Close();


                           {

                               GridView1.DataSource = dsBooking;

                               GridView1.DataBind();

                           }

                       }

                   }

               }

           }
   */
      }
  }

Karthik_Mahalingam

используйте jQuery ajax

GrpSMK

не могли бы вы помочь мне с образцом кода

Karthik_Mahalingam

Всегда использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

GrpSMK

хорошо, конечно, помоги мне

1 Ответов

Рейтинг:
10

Karthik_Mahalingam

Контроллер:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace mvc.Controllers
{
    public class HomeController : Controller
    {
        string constr = "your conneciton string";
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult GetAllTableNames() {

            SqlConnection con = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand("select name from sys.tables " , con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            var data = dt.AsEnumerable().Select(k => k["name"].ToString());
            return Json(data);
             
        }
        public ActionResult GetAllColumnNames(string tbl)
        {

            SqlConnection con = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tbl " , con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            cmd.Parameters.AddWithValue("@tbl", tbl);
            DataTable dt = new DataTable();
            da.Fill(dt);
            var data = dt.AsEnumerable().Select(k => k["COLUMN_NAME"].ToString());
            return Json(data);
             
        }


        public ActionResult GetTableData(string tableName, string columnNames)
        {
            
                SqlConnection con = new SqlConnection(constr);
                SqlCommand cmd = new SqlCommand("select " +  columnNames + " from  " + tableName, con);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                string data = JsonConvert.SerializeObject(dt);
                return Json(data);
               
        }
        
        
    }
}


Cshtml по

<script src="~/Scripts/jquery-1.10.2.js"></script>
<script>
    $(function () {

        $.ajax({
            url:  '@Url.Action("GetAllTableNames", "home")',
            data: {},
            type: 'post',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                var ddl = $('#ddlTableNames');
                var options = []; 
                for (var i = 0, len = data.length; i < len; ++i)  
                    options.push('<option value="' + data[i] + '">' + data[i] + '</option>'); 
                ddl.append(options.join(''));
            },
            error: function (a, b, c) {
                console.log(a, b, c);
            }
        });

    });

    function populateColumns(ddl){
        var table = ddl.value;  
        $.ajax({
            url: '@Url.Action("GetAllColumnNames", "home")',
            data: JSON.stringify({'tbl':table}),
            type: 'post',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                var ddl = $('#ddlColumnNames');
                ddl.empty();
                var options = [];
                for (var i = 0, len = data.length; i < len; ++i)
                    options.push('<option value="' + data[i] + '">' + data[i] + '</option>');
                ddl.append(options.join(''));
            },
            error: function (a, b, c) {
                console.log(a, b, c);
            }
        });
    }

    function getdata() {
        var table = $('#ddlTableNames').val();
        var columns = $('#ddlColumnNames').val().join(',');
        debugger;

         
        $.ajax({
            url: '@Url.Action("GetTableData", "home")',
            data: JSON.stringify({ 'tableName': table, 'columnNames':columns }),
            type: 'post',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                debugger;
                var json = JSON.parse(data);

                generateTable(json)
            },
            error: function (a, b, c) {
                console.log(a, b, c);
            }
        });
    }

    

    function generateTable(json) {

        var $table = $('#tblDynamic');
        $table.find('thead').empty()
        $table.find('tbody').empty()
        if (json && json.length > 0) {
            var header = json[0];
            var columns = [];
            for (var col in header) {
                columns.push('<th>' + col + '</th>');
            }
            $table.find('thead').append('<tr>' + columns.join('') + '</tr>');
            var rows = [];
            for (var i = 0; i < json.length; i++) {
                var row = json[i];
                var tds = [];
                for (var col in row) {
                    tds.push('<td>' + row[col] + '</td>');
                }
                rows.push('<tr>' + tds.join() + '</tr>');
            }
            $table.find('tbody').append(rows.join(''));
        }

    }

</script>

<select id="ddlTableNames" onchange="populateColumns(this)">   
</select> <br />
<select id="ddlColumnNames"  multiple></select>
<button onclick="getdata()" >get data</button>

<table id="tblDynamic">
    <thead></thead>
    <tbody></tbody>
</table>


Примечание: позаботьтесь о валидации


Maciej Los

+5!

Karthik_Mahalingam

Спасибо Мацей