2つのチェックボックスリストがあり、1つは部門と1つはコース用です。 1つの部門には多くのコースがありますので、選択した部門で提供されている別のチェックボックスリストにコースを10つしか表示しないため、自分の部門を選ぶことができます。チェックボックスリストで選択された値に基づいてSQL文を書き込む
前駆情報:私が選択した部門のリストを取得するためにこれを使用
protected void GetDiv()
{
string query = " Select distinct uio.OFFERING_ORGANISATION as [Div], ou.FES_FULL_NAME as [Division] From UNIT_INSTANCE_OCCURRENCES uio " +
" inner join ORGANISATION_UNITS ou on uio.OFFERING_ORGANISATION = ou.ORGANISATION_CODE " +
" inner join REPORTYEARS ry on uio.CALOCC_OCCURRENCE_CODE = ry.CAL_OCC " +
" Where ry.REPORT_YEAR = (select DETAILS from EF_REFERENCE_DATA Where REC_TYPE = 'Rep_Year') and uio.OFFERING_ORGANISATION is not null Order By [Division] ";
cbDivSelect.DataSource = GetData(query);
cbDivSelect.DataTextField = "DIVISION";
cbDivSelect.DataValueField = "DIV";
cbDivSelect.DataBind();
}
:
private DataTable GetData(string query)
{
string constr = ConfigurationManager.ConnectionStrings["DatabaseName"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = query;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
}
これは私がDivisions
チェックボックスのリストにデータをバインドする私のコードです
protected void cbDivSelect_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (ListItem item in cbDivSelect.Items)
{
if (item.Selected) Divisions.Add(item);
}
}
これがコースを表示する:
protected void GetCourse()
{
foreach(ListItem item in Divisions)
{
string GetCourses = "SELECT distinct Course_Code,Course_Code + ' - ' + Marketing_Title AS COURSE, Parent FROM e_prospectus WHERE (Div = '" + item.Value.ToString() + "') ORDER BY Course_Code";
cbCourseSelect.DataSource = GetData(GetCourses);
cbCourseSelect.DataTextField = "COURSE";
cbCourseSelect.DataValueField = "Course_Code";
cbCourseSelect.DataBind();
}
}
現在、選択されているリストの中で最も低いコースしか表示されていません。私はデータソースを変更し続けるため、蓄積しませんが、コードを変更できます私が欲しいものを収容する?おかげ
パラメータ化されたクエリ/ストアドプロシージャを使用してください。文字列連結を使用してクエリを構築しないでください。予期せぬ構文エラーや、さらに重要なのはSQLインジェクション攻撃に脆弱になります。 – ADyson
'GetData(GetCourses)'はリストを返します?その場合、 'GetData()'の結果を 'DataSource'と' AddRange() 'として使用するリストを作成するだけです。バインディングを更新する必要があるので、 'BindingList'を使うのがベストです。 – Mats391
パラメータ化されたクエリを完全に認識しています。文字列としてクエリを作成し、パラメータとして追加することを好むだけです。 –