Click here to Skip to main content
15,922,894 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
List box containing column names(column name changing dynamically based on another list box).Now how to display table format for list box columns in mvc4.

What I have tried:

I tried in asp.net c# but i need in mvc,here drop down select item is table name.This same code i need in mvc.
C#
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();

                           }

                       }

                   }

               }

           }
   */
      }
  }
Posted
Updated 20-Jun-17 21:38pm
v2
Comments
Karthik_Mahalingam 21-Jun-17 1:48am    
use jquery ajax
GrpSMK 21-Jun-17 1:54am    
can you please help me with sample code
Karthik_Mahalingam 21-Jun-17 2:37am    
Always use  Reply  button, to post Comments/query to the user, so that the user gets notified and responds to your text.
GrpSMK 21-Jun-17 2:46am    
ok sure,help me

1 solution

Controller:
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>


Note: Take care of validations
 
Share this answer
 
v2
Comments
Maciej Los 29-Jun-17 2:00am    
+5!
Karthik_Mahalingam 29-Jun-17 2:05am    
Thank you Maciej

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900