2014-04-25 3 views
2

Итак, я хочу заполнить/привязать некоторые данные к checkboxlist, но не может казаться binf правильным значениям? Я хочу заполнить его информацией из ROW, а не всей колонки, что и происходит со мной. Вот вам какой-то код, чтобы показать вам, в чем проблема.Заполнить checkboxlist с элементами из базы данных?

Это код в XAML

<form id="form1" runat="server"> 
<div> 

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [Option1], [Option2], [Option3] FROM [Questions] WHERE ([QuestionID] = @QuestionID)"> 
     <SelectParameters> 
      <asp:Parameter DefaultValue="1" Name="QuestionID" Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

</div> 
    <asp:CheckBoxList ID="CheckBoxList1" runat="server" DataTextField="QuestionID" DataValueField="QuestionID"> 
    </asp:CheckBoxList> 
</form> 

Это моя база данных (только пример одного) ссылки взяты из gyazo

Questions

Data


Это мой код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 
using System.Web.Configuration; 

namespace ExampleCheckbox 
{ 
public partial class Question_One : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string connectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

     SqlConnection con = new SqlConnection(connectionString); 

     SqlCommand command = new SqlCommand(); 
     command.Connection = con; 
     command.CommandType = CommandType.Text; 
     command.CommandText = "Select * from Questions"; 

     SqlDataAdapter dataAdapter = new SqlDataAdapter(command); 
     DataSet questionsDataSet = new DataSet(); 


      con.Open(); 
      dataAdapter.Fill(questionsDataSet, "Question"); 

      DataTable dt = questionsDataSet.Tables["Question"]; 

      foreach (DataRow dr in dt.Rows) 
      { 
       ListItem newItem = new ListItem(dr["Option1"].ToString(), dr["QuestionID"].ToString()); 
       CheckBoxList1.Items.Add(newItem); 
      } 

      CheckBoxList1.DataSource = questionsDataSet; 
      CheckBoxList1.DataTextField = "Option1"; 
      CheckBoxList1.DataValueField = "QuestionID"; 
      CheckBoxList1.DataBind(); 
    } 
} 

}


Это также проблема я имею PROBLEM

Благодарности

+1

Похоже, вы зацикливаете данные и вручную привязываете их вручную. Вы пытались удалить 4 линии привязки внизу? Прокомментируйте это и сообщите мне, что вы придумали. – SeanKendle

+0

@SeanKendle Нет, я еще не знаю, я также получаю сообщение об ошибке «Оба источника данных и datasourceid ar не определены», когда я общаюсь с ним, но я могу избавиться от этой ошибки. – crsMC

+1

Я бы либо избавился от этого цикла, а просто привязал 'CheckBoxList1' с' dt' или удалил (закомментировал сейчас) нижние 4 строки, которые databind * снова *. Кроме того, я бы настоятельно рекомендовал более четко называть элементы управления и переменные. Могут быть очевидны, что они делают сейчас, но через несколько месяцев это займет в два раза больше времени, чтобы читать и понимать ваш собственный код. – SeanKendle

ответ

2

Что вы хотите сделать, это перебрать столбцы вместо строк и получить вместо них имена столбцов.

Заканчивать этот вопрос/ответ здесь:

http://social.msdn.microsoft.com/Forums/en-US/4b6ede3b-093d-46f1-8766-d4a96608997d/loop-thru-a-datatable-for-columnnames-columnvalues?forum=csharpgeneral

Вот полный пример. Вот как выглядит ваш код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 
using System.Web.Configuration; 

namespace ExampleCheckbox 
{ 
public partial class Question_One : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string connectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

     SqlConnection con = new SqlConnection(connectionString); 

     SqlCommand command = new SqlCommand(); 
     command.Connection = con; 
     command.CommandType = CommandType.Text; 
     command.CommandText = "Select * from Questions"; 

     SqlDataAdapter dataAdapter = new SqlDataAdapter(command); 
     DataSet questionsDataSet = new DataSet(); 


      con.Open(); 
      dataAdapter.Fill(questionsDataSet, "Question"); 

      DataTable dt = questionsDataSet.Tables["Question"]; 

      int i = 0; 
      string str1 = string.Empty; 
     int i = 0; 
        dr = dt.Rows(ClientID); //whatever you're using for the row index 
      foreach (DataColumn dc in dt.Columns) 
      { 
       ListItem newItem = new ListItem(dr[dc].ToString(), i.ToString()); 
       CheckBoxList1.Items.Add(newItem); 
       i++; 
      } 
     } 
    } 
     } 

} 
+0

Спасибо, прочитаю это сейчас и попробую заставить его работать! – crsMC

+2

Если бы я помог вам, пожалуйста, проголосуйте за мой ответ/комментарии, которые помогли и приняли это как ответ! Я вижу, ты здесь совсем новый!^ _- – SeanKendle

+0

Да, это помогло мне, но все равно не могу заставить это работать, но я все еще пытаюсь. Благодаря! – crsMC

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