Reputation: 5808
I am working with the mvc4 razor, this is the first model code
public class WebLicenses
{
public string WebLicenseName { get; set; }
public int CustomerWebLicensesCount { get; set; }
}
public class WebApplication
{
public string WebApplicationName { get; set; }
public int Count { get; set; }
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? EndDate { get; set; }
public string Never { get; set; }
}
public class griddetail
{
public griddetail( List<WebLicenses> wl1,List<WebApplication> wa1 )
{
wl =wl1;
wa = wa1;
}
//public List<WebLicenses> wl2 { get; private set; }
public List<WebLicenses> wl { get; set; }
public List<WebApplication> wa { get; set; }
}
this is my second model code which uses the first model code as (here stored procedure return 2 table - WebLicenses, WebApplication (In below code error comes --commented)
public IEnumerable GetOutlookGridDetail(string customerId = "")
{
List<WebLicenses> weblicenses = new List<WebLicenses>();
List<WebApplication> webapplication = new List<WebApplication>();
griddetail returnValue = new griddetail(weblicenses, webapplication);
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("selectCustomerDetail", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param_CustomerID = new SqlParameter("@CustomerID", SqlDbType.VarChar, 10);
param_CustomerID.Value = customerId;
cmd.Parameters.Add(param_CustomerID);
try
{
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
WebLicenses newRecord = new WebLicenses();
newRecord.WebLicenseName = Convert.ToString(reader["WebLicenseName"]);
newRecord.CustomerWebLicensesCount = Convert.ToInt32(reader["CustomerWebLicensesCount"]);
//returnValue.Add(newRecord);
weblicenses.Add(newRecord);
}
reader.NextResult();
while (reader.Read())
{
WebApplication newRecord = new WebApplication();
newRecord.WebApplicationName = Convert.ToString(reader["WebApplicationName"]);
newRecord.Count = Convert.ToInt32(reader["Count"]);
newRecord.Never = Convert.ToString(reader["Never"]);
webapplication.Add(newRecord);
}
returnValue.wl.Add(weblicenses); //here comes error (Argument 1: cannot convert from 'System.Collections.Generic.List<SLIM.Models.WebLicenses>' to 'SLIM.Models.WebLicenses')
}
catch (Exception)
{
// returnValue = null;
}
finally
{
cmd.Dispose();
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
}
return returnValue;
}
this is my controller code.
[HttpPost]
public ActionResult GridViewPartialView(string recordId)
{
IEnumerable result1 = (new SlimHomePageData()).GetRecords(recordId, "");
IEnumerable result2 = (new SlimHomePageData()).GetRecords();
List<object> finalResult = new List<object>();
finalResult.Add(result1);
finalResult.Add(result2);
return PartialView("OutlookGridDetail", finalResult);
}
I want to return a single list which consists 2 lists (but above error comes). Also suggest, Is this right approach as stored procedure return multiple tables and we want to set value in view via a model.
Upvotes: 2
Views: 1620
Reputation: 5808
I forgot to give answer, but yesterday somebody gives minus vote. Yes its too long time. What I did (I again explain everything to understand more) :
Step1: Define the 2 class as
public class WebLicenses
{
public int WebLicenseID { get; set; }
public string WebLicenseName { get; set; }
public int CustomerWebLicensesCount { get; set; }
public string CreatedBy { get; set; }
public string UpdatedBy { get; set; }
}
public class WebApplication
{
public int appID { get; set; }
public string WebApplicationName { get; set; }
public int Count { get; set; }
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? EndDate { get; set; }
public bool Never { get; set; }
public string CreatedBy { get; set; }
public string UpdatedBy { get; set; }
}
public class griddetail
{
public griddetail(List<WebLicenses> wl1, List<WebApplication> wa1)
{
weblicences = wl1;
webapplication = wa1;
}
public List<WebLicenses> weblicences { get; set; }
public List<WebApplication> webapplication { get; set; }
}
Step2: change in controller as
IEnumerable
to griddetail
classAt the end declare and assign this nested class in a griddetail
class
public class SlimHomePageData
{
private SLIMDataContext dc = new SLIMDataContext(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
.
.
.
public IEnumerable GetOutlookGridDetail(string customerId = "")
{
List<WebLicenses> weblicenses = new List<WebLicenses>();
List<WebApplication> webapplication = new List<WebApplication>();
//remove from here and add at the end of this method
//griddetail returnValue = new griddetail(weblicenses, webapplication);
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("selectCustomerDetail", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param_CustomerID = new SqlParameter("@CustomerID", SqlDbType.VarChar, 10);
param_CustomerID.Value = customerId;
cmd.Parameters.Add(param_CustomerID);
try
{
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
WebLicenses newRecord = new WebLicenses();
newRecord.WebLicenseName = Convert.ToString(reader["WebLicenseName"]);
newRecord.CustomerWebLicensesCount = Convert.ToInt32(reader["CustomerWebLicensesCount"]);
weblicenses.Add(newRecord);
}
}
reader.NextResult();
if (reader.HasRows)
{
while (reader.Read())
{
WebApplication newRecord = new WebApplication();
newRecord.WebApplicationName = Convert.ToString(reader["WebApplicationName"]);
newRecord.Count = Convert.ToInt32(reader["Count"]);
bool never = false;
if (reader["Never"] != DBNull.Value)
{
bool.TryParse(reader["Never"].ToString(), out never);
}
if (reader["EndDate"] != DBNull.Value)
{
newRecord.EndDate = Convert.ToDateTime(reader["EndDate"]);
}
newRecord.Never = never;
webapplication.Add(newRecord);
}
}
reader.Close();
}
catch (Exception)
{
// returnValue = null;
}
finally
{
cmd.Dispose();
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
}
griddetail returnValue = new griddetail(weblicenses, webapplication, webcustomapplication, maintenance, smartcv, histry, doc);
return returnValue;
}
.
.
}//closing of my SlimHomePageData class
**Step 3:**In ActionMethod changed as :After posted this question I changed in the method, but you can use the same method concept in above question. Later I need another class to add result1
while return.
public ActionResult GridViewPartialView()
{
return View();
}
[HttpPost]
public ActionResult childGridViewPartialView(string recordId, string filtervalue, string flag)
{
if (flag == "GridRowChanged")
{
IEnumerable result1;
griddetail result3;
if (recordId != null)
{
result1 = (new SlimHomePageData()).GetRecords(recordId, ""); //another result to be add later at the end of action method
result3 = (new SlimHomePageData()).GetOutlookGridDetail(recordId); //this was in my question
}
else
{
result1 = new List<SlimHomePageRecord>(); //another result to be add later at the end of action method
result3 = (new SlimHomePageData()).GetOutlookGridDetail(recordId); //this was in my question
}
List<object> finalResult = new List<object>();
finalResult.Add(result1);
finalResult.Add(result3);
return PartialView("OutlookGridDetail", finalResult);
}
else
{
return PartialView("childGridViewPartialView", (new SlimHomePageData()).GetRecords(null, null));
}
}
Upvotes: 5
Reputation: 815
the instance weblicenses is a List type. It looks like it should be a single instance of WebLicenses.
You may want to add the newRecord instance to the returnValue.wl list instead of the list instance.
Edit: You don't need to add anything to the wl list properties because you are adding to the WebLicenses list. The property wl on returnValue is a reference to the WebLicences instance so if you add to WebLicences then wl will show the same addition.
Upvotes: 0