PDA

View Full Version : Sự kiện SelectedIndexChanged của DropDownList [Asp.Net(c#)]



phongvan212pg
26-12-2010, 12:51
Mình có 1 DropDownList bên ngoài 1 Datagrid.
Trong DropDownList có 3 item(Toán,Văn,Anh).
Trong Datagrid có 3 trường(Tên Sinh Viên, Tên Môn Học, Điểm).
Bây giờ mình muốn khi click vào 1 item của DropDownList thì trường Tên Môn Học của Datagrid chỉ hiển thị môn học đó.
Ai biết giúp mình nha!

zxcongducxz
27-12-2010, 01:15
<body>
<form runat="server">
<table align="center">
<tr><th><asp:DropDownList ID="ddl" onselectedindexchanged="ddl_SelectedIndexChanged" runat="server" AutoPostBack="true"></asp:DropDownList></th></tr>
<tr><th><asp:DataGrid ID="dtg" runat="server"></asp:DataGrid></th></tr>
</table>
</form>
</body>
/* Code Behind */
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) CapNhatDuLieu();
}
private void CapNhatDuLieu()
{
//Thêm dữ liệu vào DropDownList tên là "ddl"
ddl.Items.Add("Toán");
ddl.Items.Add("Văn");
ddl.Items.Add("Anh");

//Thêm dữ liệu vào Datatable tên là "dt"
DataTable dt = new DataTable();
dt.Columns.Add("TenSinhVien");
dt.Columns.Add("TenMonHoc");
dt.Columns.Add("Diem");
dt.Rows.Add(new String[] { "Lê Công Đức", "Toán", "10" });
dt.Rows.Add(new String[] { "Lê Công Đức", "Văn", "9" });
dt.Rows.Add(new String[] { "Lê Công Đức", "Văn", "8" });

//Cập nhật DataTable vào DataGridView
dtg.DataSource = dt;
dt.Columns["TenSinhVien"].ColumnName = "Tên sinh viên";
dt.Columns["TenMonHoc"].ColumnName = "Tên môn học";
dt.Columns["Diem"].ColumnName = "Điểm";
dtg.DataBind();
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
for (Int32 i = 0; i < dtg.Items.Count; i++)
{
if (dtg.Items[i].Cells[1].Text == ddl.SelectedItem.Value)
dtg.Items[i].Visible = true;
else
dtg.Items[i].Visible = false;
}
}

phongvan212pg
28-12-2010, 14:05
Mình quên nói bạn là dropdownlist mình load từ CSDL
Code của mình đậy:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
load_data();
load_mh_ddl();
}
}
XL_Diem xl;
DataTable tb;
public void load_data()
{
tb = new DataTable();
xl = new XL_Diem();
tb = xl.lien_ket_du_lieu();
dtg.DataSource = tb;
dtg.DataBind();
}

SqlCommand cmd;
private string cnn = ConfigurationSettings.AppSettings["cn"].ToString();
public void load_mh_ddl()
{
try
{
SqlConnection connection = new SqlConnection(cnn);
connection.Open();
cmd = new SqlCommand("select * from MONHOC", connection);
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
SqlDataReader dulieu = cmd.ExecuteReader();
while (dulieu.Read())
{ ddl.Items.Add(dulieu["TenMonHoc"].ToString());
}
}
catch (Exception ex)
{ Response.Write(ex.Message); }
}

Bạn tải về xem dùm mình nha, có 1 trang thôi, mình mất ngủ mấy ngày nay hic, cám ơn bạn giúp mình nha!
Link: http://www.mediafire.com/?q715pf9d8bxddmj

zxcongducxz
28-12-2010, 21:45
có gì sửa lại web.config cái datasource nha

http://www.mediafire.com/download.php?c141u1c65h5w8ti

phongvan212pg
30-12-2010, 20:33
có gì sửa lại web.config cái datasource nha

http://www.mediafire.com/download.php?c141u1c65h5w8ti

Cám ơn bạn nhiều nha, mình làm được rồi, hihi, code của bạn thanh tao hơn 2 ông thầy của mình nhiều hihi.

Mình đếm số sinh viên(tất cả) trong datagrid được rồi(DataGrid1.Items.Count), nhưng khi chọn trong dropdownlist thì datagrid sẽ hiển thị những sinh viên trong môn học được chọn, bạn giúp mình đếm số sinh viên đó nha.

zxcongducxz
30-12-2010, 23:17
Cách 1: Đếm trên web


for (Int32 i = 0; i < dtg.Items.Count; i++)
if (dtg.Items[i].Cells[1].Text == ddl.Text)
dtg.Items[i].Visible= true;
else
dtg.Items[i].Visible = false;

//Phần đếm
Int32 KQ=0;
for (Int32 i = 0; i < dtg.Items.Count; i++)
if (dtg.Items[i].Visible == true)
KQ += 1;
Response.Write(KQ.ToString());

hoặc


Int32 KQ = 0;
for (Int32 i = 0; i < dtg.Items.Count; i++)
if (dtg.Items[i].Cells[1].Text == ddl.Text)
{
dtg.Items[i].Visible = true;
KQ += 1;
}
else
dtg.Items[i].Visible = false;

Response.Write(KQ.ToString());


Cách 2: Đếm trên SQL
Class LT_Bang.cs (Thêm mới dòng sau)


public String Dem(String CauLenhSQL)
{
ket_noi.Open();
String KQ=new SqlCommand(CauLenhSQL, ket_noi).ExecuteScalar().ToString();
ket_noi.Close();
return KQ;
}

Trang Default.aspx


protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
for (Int32 i = 0; i < dtg.Items.Count; i++)
if (dtg.Items[i].Cells[1].Text == ddl.Text)
dtg.Items[i].Visible = true;
else
dtg.Items[i].Visible = false;
Response.Write(lt.Dem("select COUNT(*) from SinhVien s, BangDiem b, MonHoc m where s.MSSV=b.MSSV and b.MSMH=m.MaSoMonHoc and m.TenMonHoc=N'"+ddl.SelectedItem+"'"));
}

phongvan212pg
01-01-2011, 21:34
Bạn ơi, sao mình dùng mấy đoạn code của bạn thì nó ra 1 dãy số dài ngoằn, bạn xem lại dùm mình nha, bạn có thể cho dữ liệu mà mình đếm được show lên texbox được không?

zxcongducxz
02-01-2011, 00:12
Mà mình sài nhiều cách quá hok bik bạn hỏi cách nào, nó báo lỗi ra sao =]]
sửa Response.Write thành Textbox.Text thôi bạn

phongvan212pg
02-01-2011, 23:11
Mình dùng cách 2(đếm trên sql), thí dụ trong datagrid có 4 dòng thì nó đếm thành 44444444444444444444444444444444, có ba dòng thì đếm thành 33333333333333333333333333333333, có 5 dòng thì nó đếm thành 55555555555555555555555555555555, còn nhiều hơn 10 dòng thì nó đếm thành 16161616161616161616161616161616161616161616161616 16161616161616161616161616161616161616161616161616 16161616161616161616161616161616161616161616161616 16161616161616161616161616161616161616161616161616 16161616161616161616161616161616161616161616161616 16161616161616161616161616161616161616161616161616 16161616161616161616161616161616161616161616161616 16.

Mình đổi Response.Write thành Textbox.Text thì nó không chạy luôn,
lb_dem.Text(lt.Dem("select COUNT(*) from SINHVIEN s, BANGDIEM b, MONHOC m where s.MSSV=b.MSSV and b.MSMH=m.MaSoMonHoc and s.DiaPhuong=N'" + ddl_dia_phuong.SelectedItem + "'"));

Nó báo lỗi này:
'System.Web.UI.WebControls.Label.Text' is a 'property' but is used like a 'method'

zxcongducxz
03-01-2011, 10:40
http://www.mediafire.com/?b644xn44crcipsk

phongvan212pg
06-01-2011, 00:00
Bạn ơi, hơn 10 dòng thì mình đếm được rồi, còn dưới 10 dòng thì chưa được chính xác, bạn xem giúp mình nha, trang HomePage đó.
http://www.mediafire.com/?o6lwf6r312ycsdv

zxcongducxz
06-01-2011, 16:27
Bạn ơi, hơn 10 dòng thì mình đếm được rồi, còn dưới 10 dòng thì chưa được chính xác, bạn xem giúp mình nha, trang HomePage đó.
http://www.mediafire.com/?o6lwf6r312ycsdv


File nén bị lỗi =]]

phongvan212pg
07-01-2011, 01:05
File nén bị lỗi =]][/QUOTE]

Link nè bạn: http://www.mediafire.com/?tot5kni1y5un2nn

zxcongducxz
07-01-2011, 11:16
Lần sau mà
CSDL đưa hok đủ
Một bài mà 2 CSDL
Sử dụng try catch
Sử dụng quá nhiều đối tượng để người dùng phải click nhiều lần
Bài làm phải cho người dùng phải đợi
Dữ liệu ít thì nên xử lý nhiều ở client
==>Code quá dài dòng, không tối ưu, không đc điểm cao đâu =]]

http://www.mediafire.com/download.php?9o4m4uxeurn3rxn

1.Bài của bạn thì người dùng phải chọn nút radio
2.Đợi cho Dropdownlist hiển thị
3.Click vào Dropdownlist
4.Chọn mục trong Dropdownlist
==>Bỏ 2 bước đầu

phongvan212pg
09-01-2011, 11:38
Cách đó do ông thầy mình hướng dẫn, hic.
Mình mới học nên chưa ngộ ra được.
Cám ơn bạn đã chỉ điểm, mình không vào vết xe đổ đó nữa.