<Cthuvien:DR_lke>
Controls thay thế: BSSLke
Mô tả
Cthuvien:DR_lke là một control ComboBox tra cứu động xây dựng trên ô <input type="text" />. Khác với DR_list dùng danh sách tĩnh khai báo sẵn qua lke, control DR_lke được thiết kế để tra cứu dữ liệu từ CSDL thông qua thuộc tính ktra (render thành attribute ham_list ở client), hoặc mở Form tham khảo dạng popup qua f_tkhao (phím F1 hoặc click).
Control hỗ trợ:
- Tra cứu động từ CSDL qua
ham_listvới các tùy chọn sắp xếp (xep) và tính chất lọc (tc). - Mở form tham khảo popup qua
f_tkhao. - Tự động tích hợp với lưới
GridXkhi đặt trong ô lưới (CssClassbắt đầu bằngcss_G). - Đặt giá trị mặc định khi load form qua
gtriDau. - Lưu vết truy vấn bàn phím qua
luu. c
Thuộc tính
Thuộc tính chung
| Tên | Kiểu | Mặc định | Có thể có | Mục đích | Ghi chú |
|---|---|---|---|---|---|
ten | string | "" | Tên hiển thị trong thông báo lỗi/sự kiện | Nếu để trống sẽ dùng giá trị ID | |
truot | string | "" | Trượt menu/danh sách theo màn hình (cơ chế JS) | ||
rong | int | 0 | Số nguyên dương | Độ rộng (px) của hộp thả xuống | Nếu 0, lấy theo độ rộng thẻ text tự động |
rongB | bool | false | true / false | Ràng buộc độ rộng menu popup theo thẻ DIV bao ngoài | Nếu true, gán rong="C" trên client, ghi đè lên rong |
nhap | bool | true | true / false | Cho phép nhập tay hay không (C/K ở client) | Khi đặt trong lưới (css_G...) luôn là K bất kể khai báo |
kt_xoa | string | "K" | K, G, L, X | Hành vi xóa/giữ giá trị khi làm mới form | K: không xóa; G: dùng cho mã; L: giữ khi làm mới; X: luôn xóa |
gtriDau | string | "" | Giá trị mặc định khi form load | Nếu chứa {, tách ra để gọi P_LKE_DAT đặt sẵn text và giá trị ẩn |
Thuộc tính tra cứu
| Tên | Kiểu | Mặc định | Có thể có | Mục đích | Ghi chú |
|---|---|---|---|---|---|
f_tkhao | string | "" | URL path | Đường dẫn form tham khảo popup (thường mở bằng F1) | Tự động ResolveUrl nếu là đường dẫn .aspx |
ktra | string | "" | "bảng,mã,tên" | Chuỗi cấu hình tra cứu CSDL gồm tên bảng, trường điều kiện, trường kết quả | Render thành attribute ham_list ở client |
xep | string | "T" | M, T | Kiểu sắp xếp kết quả: T theo tên, M theo mã | Render thành xep="2" (theo tên) hoặc xep="1" (theo mã) ở client |
tc | string | "C" | C, T, A | Tính chất danh sách: C chi tiết, T tổng hợp, A tất cả | |
luu | bool | false | true / false | Lưu vết truy vấn bàn phím | Render thành luu="C" hoặc luu="K" ở client |
traAn | string | "" | Giá trị ẩn (mã) tương ứng với text đang hiển thị | Render vào attribute traAn ở client | |
traKieu | string | "A" | A, T | Định dạng giá trị trả về | A: chỉ trả value; T: trả value|label |
Khởi tạo
Quá trình render phía server (OnPreRender)
Khi trang render, DR_lke thực hiện tuần tự:
1. Xử lý dữ liệu:
- Nếu
tenđể trống, gánten = ID. - Nếu
gtriDauđược khai báo, tách chuỗi theo ký tự{để lấy phần giá trị và phần text, sau đó gọiform.P_LKE_DATđể đặt sẵn nội dung vào control. - Chuyển đổi
xep:"M"→"1","T"→"2". - Chuyển đổi
luu:true→"C",false→"K". - Nếu
f_tkhaolà đường dẫn.aspx, tự động gọiResolveUrlđể chuyển thành URL tuyệt đối.
2. Gán attribute lên thẻ <input>:
| Attribute | Giá trị | Mô tả |
|---|---|---|
tenKieu | "DR_lke" | Xác định loại control |
ten | ten hoặc ID | Tên dùng cho thông báo/lỗi |
ten_goc | ID | ID gốc của control |
kt_xoa | Giá trị kt_xoa | Cơ chế xóa/làm mới |
gtriDau | Giá trị gtriDau | Giá trị mặc định (nếu có) |
truot | Giá trị truot | Cơ chế trượt màn hình |
rong | Số px hoặc "C" | Độ rộng dropdown |
xep | "1" hoặc "2" | Kiểu sắp xếp kết quả |
luu | "C" hoặc "K" | Lưu vết truy vấn |
tc | Giá trị tc | Tính chất danh sách |
f_tkhao | URL đã resolve | Đường dẫn form tham khảo |
ham_list | Giá trị ktra | Chuỗi cấu hình tra cứu CSDL |
traAn | Giá trị traAn | Giá trị ẩn hiện tại |
traKieu | Giá trị traKieu | Kiểu kết quả trả về |
textAn | this.Text | Text hiển thị hiện tại |
dropL | "K" | Đánh dấu là control tra cứu động (không phải list tĩnh) |
nhap | "C" / "K" | Có cho nhập tay hay không |
3. Gán sự kiện client:
Control luôn gắn:
onmousedown="form_LIST_CLICK(this, 'K', event);"
onkeydown="lke_XUONG(event);"
Khác với DR_list truyền 'L' vào form_LIST_CLICK, DR_lke truyền 'K' để kích hoạt cơ chế tra cứu động thay vì mở danh sách tĩnh.
Nếu control nằm ngoài lưới và đã có onchange khai báo sẵn, hệ thống tự thêm kiểm tra vào trước:
onchange="lke_P_KTRA(this);<hàm_cũ>;"
Nếu control nằm trong lưới (CssClass bắt đầu bằng css_G), render theo cơ chế lưới:
nhap="K"
onchange="GridX_hamUp(event);"
onfocus="GridX_doiMauBF(event);"
4. CSS class mặc định:
Nếu CssClass chưa được đặt, control tự gán css_list.
So sánh với DR_list
DR_list | DR_lke | |
|---|---|---|
| Nguồn dữ liệu | Chuỗi tĩnh khai báo qua lke | Tra cứu động từ CSDL qua ktra |
| Mở popup | Không | Có, qua f_tkhao (phím F1) |
dropL trên client | "L" | "K" |
Tham số form_LIST_CLICK | 'L' | 'K' |
| Sắp xếp kết quả | Không áp dụng | Có, qua xep |
| Lưu vết truy vấn | Không | Có, qua luu |
Ví dụ
Tra cứu nhân viên từ CSDL
<Cthuvien:DR_lke
ID="drpNhanVien"
runat="server"
ten="Nhân viên"
ktra="ns_tq_nhanvien,ma,ten"
f_tkhao="~/ns/td/ns_tq_nhanvien.aspx" />
HTML render tương ứng:
<input
id="ctl00_MainContent_drpNhanVien"
type="text"
class="css_list"
tenKieu="DR_lke"
ten="Nhân viên"
ten_goc="drpNhanVien"
kt_xoa="K"
xep="2"
luu="K"
tc="C"
onmousedown="form_LIST_CLICK(this,'K',event);"
onkeydown="lke_XUONG(event);"
f_tkhao="/ns/td/ns_tq_nhanvien.aspx"
nhap="C"
ham_list="ns_tq_nhanvien,ma,ten"
traAn=""
traKieu="A"
textAn=""
dropL="K" />
Tra cứu với sắp xếp theo mã và lọc tổng hợp
<Cthuvien:DR_lke
ID="drpDonVi"
runat="server"
ten="Đơn vị"
ktra="dm_donvi,ma,ten"
xep="M"
tc="T"
traKieu="T" />
Render trên client: xep="1" (theo mã), tc="T" (tổng hợp), giá trị trả về dạng "ma|ten".
Đặt trong lưới GridX
<Cthuvien:DR_lke
ID="drpMaHang"
runat="server"
CssClass="css_Glist"
ten="Mã hàng"
ktra="dm_hang,ma,ten"
f_tkhao="~/dm/dm_hang.aspx" />
Render trong ô lưới:
<input
class="css_Glist"
tenKieu="DR_lke"
nhap="K"
ham_list="dm_hang,ma,ten"
f_tkhao="/dm/dm_hang.aspx"
dropL="K"
onmousedown="form_LIST_CLICK(this,'K',event);"
onkeydown="lke_XUONG(event);"
onchange="GridX_hamUp(event);"
onfocus="GridX_doiMauBF(event);" />
Đặt giá trị mặc định khi load
<Cthuvien:DR_lke
ID="drpPhong"
runat="server"
ten="Phòng ban"
ktra="dm_phong,ma,ten"
gtriDau="P01{Phòng Kỹ thuật" />
Chuỗi gtriDau được tách theo {:
- Phần trước
{→ giá trị ẩn (traAn):"P01" - Phần sau
{→ text hiển thị:"Phòng Kỹ thuật"
form.P_LKE_DAT sẽ đặt sẵn cả hai vào control khi render.