2013-05-16 3 views
-1

Я хочу привязать мое gridview на основе извлеченных данных из wcf-сервиса. Но он показывает только последние данные строки в gridview, а не показывает их все.Как привязать gridview к приложению обслуживания wcf?

Вот мой WCF:

try 
{ 
    DSCustomer dscat = new DSCustomer(); 
    //input is EmpUserID 
    cmd.Parameters.AddWithValue("@myuser", id); 
    cmd.CommandText = "mystoredproc"; 
    List<DSCustomer> lst = new List<DSCustomer>(); 
    SqlDataReader dr = cmd.ExecuteReader(); 

    while (dr.Read()) 
    { 
     dscat.MyEmpID = Convert.ToInt32(dr["Emp"]); 
     dscat.MyEmpName = dr["EmpName"].ToString(); 
     dscat.MyUnitName = dr["UnitName"].ToString(); 
     dscat.MyUnitNumber = Convert.ToInt32(dr["Unit"]); 
     dscat.MyRole = dr["Role"].ToString(); 
     dscat.MySurveyStatus = dr["SurveyStatus"].ToString(); 

     //Add all the returns in to the list from back-end 
     lst.Add(dscat); 
    } 

    //returns to the list 
    return lst; 
} 

это DScustomer

public class DSCustomer 
    { 
     //Created properties based on the count of the data that we want to retrieve 
     public int MyEmpID { get; set; } 
     public string MyEmpName { get; set; } 
     public string MyUnitName { get; set; } 
     public int MyUnitNumber { get; set; } 
     public string MyRole { get; set; } 
     public string MySurveyStatus { get; set; } 

    } 

И мой default.aspx:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    MyServiceClient client = new MyServiceClient(); 
    Customer cust = new Customer(); 

    cust = client.getCategori(tbEmpID.Text); 

    var list = new List<Customer> { cust }; 
    GridView1.DataSource=list; 
    GridView1.DataBind(); 
} 
+0

Глупый вопрос. Это настоящий код для службы? Я не вижу места в цикле while, создающего экземпляр нового экземпляра любого dscat. Таким образом, значения будут перегружаться каждый раз. – Rich

+1

Don подобный пожалуйста. Просто поделитесь с вами ответом, я не разделял этот вопрос, чтобы услышать ваш голос. – Abdullah

+1

@Abdullah, что такое подпись метода WCF и каков тип возврата 'client.getCategori'? – Damith

ответ

0

проблема, я думаю, что вы называете различные услуги

Customer cust = new Customer(); 
cust = client.getCategori(tbEmpID.Text); // this method only return one customer 
var list = new List<Customer> { cust }; 
GridView1.DataSource=list; 
GridView1.DataBind(); 

В вашей данной услуги вы возвращаете список, так что вы можете напрямую связать его с DataGrid

GridView1.DataSource=client.getCategori(tbEmpID.Text).AsEnumerable() ; 
GridView1.DataBind(); 

еще одна вещь, в то время как петли создать новую DSCustomer и добавить его в список в конце

while (dr.Read()) 
    { 
     DSCustomer cust = new DSCustomer(); 
     cust.MyEmpID = Convert.ToInt32(dr["Emp"]); 
     cust.MyEmpName = dr["EmpName"].ToString(); 
     cust.MyUnitName = dr["UnitName"].ToString(); 
     cust.MyUnitNumber = Convert.ToInt32(dr["Unit"]); 
     cust.MyRole = dr["Role"].ToString(); 
     cust.MySurveyStatus = dr["SurveyStatus"].ToString(); 
     lst.Add(cust); 
    } 
+0

IT основан на empid. когда я запускаю его в фоновом режиме, показывает мне две записи. – Abdullah

+0

Я пробовал этот путь, но показывает, что источником данных является недопустимый тип. Он должен быть либо IListSource, IEnumerable, либо IDataSource. ошибка – Abdullah

+0

@Abdullah попробуйте с '.AsEnumerable()' в конце – Damith

0

линия, где вы объявляете переменную dscat:

DSCustomer dscat = new DSCustomer(); 

должны быть перемещены внутри КН ile. Хотя вы можете добавить N количество элементов в lst, каждый элемент DSCustomer в lst будет иметь те же значения, что и последний элемент, добавленный в список lst.

отметить также, что ваш призыв к службе WCF:

Customer cust = new Customer(); 
cust = client.getCategori(tbEmpID.Text); 

Показывает, что вы получите только 1 объект клиента обратно (не много), а затем создать список 1 пункт из этого объекта:

var list = new List<Customer> { cust }; // list only has 1 item. 

Похоже, что код, отображаемый для службы WCF, - это не тот метод, который вы вызываете на клиенте.

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