c# - Gridview ASP.Net 中自动生成的下拉列表列的问题
问题描述
protected void gridChamCong_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
List<DateTime> NgayNghi = new List<DateTime>();
NgayNghi = oNgayNghi.load_ListNgayNghi();
int ngayle = 0;
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[2].Text = txtCongChuan.Text;
e.Row.Cells[3].Text = txtCongChuan.Text;
e.Row.Cells[4].Text = txtCongChuan.Text;
e.Row.Cells[5].Text = txtCongChuan.Text;
System.Web.UI.WebControls.TextBox txtCa3 = new System.Web.UI.WebControls.TextBox();
txtCa3.ID = "txtCa3";
txtCa3.Text = "0";
txtCa3.Width = 30;
e.Row.Cells[6].Controls.Add(txtCa3);
int songay = 0;
DateTime denngay = DateTime.ParseExact(dateDenNgay.Text, "yyyy-MM-dd", null);
DateTime tungay = DateTime.ParseExact(dateTuNgay.Text, "yyyy-MM-dd", null);
songay = ((int)(denngay - tungay).TotalDays) + 1;
for (int i = 0; i < songay; i++)
{
DropDownList ddlKiHieuChamCong = new DropDownList();
ddlKiHieuChamCong.ID = "ddlKiHieuChamCong";
System.Data.DataTable ddlKyHieu = new System.Data.DataTable();
ddlKyHieu = oKyHieuChamCong.GetDataDDLKyHieuChamCong();
ddlKiHieuChamCong.DataSource = ddlKyHieu;
ddlKiHieuChamCong.DataTextField = ddlKyHieu.Columns[1].ColumnName;
ddlKiHieuChamCong.DataValueField = ddlKyHieu.Columns[0].ColumnName;
ddlKiHieuChamCong.DataBind();
//ddlKiHieuChamCong.AutoPostBack = true;
ddlKiHieuChamCong.SelectedIndexChanged += ddlKiHieuChamCong_SelectedIndexChanged;
ddlKiHieuChamCong.Enabled = true;
ddlKiHieuChamCong.EnableViewState = true;
DateTime ngayxet = tungay.AddDays(i);
if (ngayxet.DayOfWeek == DayOfWeek.Saturday || ngayxet.DayOfWeek == DayOfWeek.Sunday)
ddlKiHieuChamCong.SelectedIndex = 9;
else if (NgayNghi.Exists(x => x.Date == ngayxet.Date))
{
ddlKiHieuChamCong.SelectedIndex = 5;
ngayle++;
}
else
ddlKiHieuChamCong.SelectedIndex = 0;
e.Row.Cells[7].Text = ngayle+"";
e.Row.Cells[i + 8].Controls.Add(ddlKiHieuChamCong);
}
}
}
protected void btnTao_Click(object sender, EventArgs e)
{
List<DateTime> NgayNghi = new List<DateTime>();
NgayNghi = oNgayNghi.load_ListNgayNghi();
if (gridChamCong.Columns.Count > 0)
gridChamCong.Columns.Clear();
BoundField bfield = new BoundField();
bfield.HeaderText = "Id";
bfield.DataField = "ID";
gridChamCong.Columns.Add(bfield);
BoundField tName = new BoundField();
tName.HeaderText = "Nhân sự";
tName.DataField = "Tên Nhân Viên";
gridChamCong.Columns.Add(tName);
TemplateField tCountDate = new TemplateField();
tCountDate.HeaderText = "Ngày công";
gridChamCong.Columns.Add(tCountDate);
TemplateField tNgayLuongHeSo = new TemplateField();
tNgayLuongHeSo.HeaderText = "LHS";
gridChamCong.Columns.Add(tNgayLuongHeSo);
TemplateField tNgayLuongCanBan = new TemplateField();
tNgayLuongCanBan.HeaderText = "LCB";
gridChamCong.Columns.Add(tNgayLuongCanBan);
TemplateField tNgayAnGiuaCa = new TemplateField();
tNgayAnGiuaCa.HeaderText = "AGC";
gridChamCong.Columns.Add(tNgayAnGiuaCa);
TemplateField tNgayCa3 = new TemplateField();
tNgayCa3.HeaderText = "Ca3";
gridChamCong.Columns.Add(tNgayCa3);
TemplateField tNgayPhep = new TemplateField();
tNgayPhep.HeaderText = "Lễ/Phép";
gridChamCong.Columns.Add(tNgayPhep);
int songay = 0;
DateTime denngay = DateTime.ParseExact(dateDenNgay.Text, "yyyy-MM-dd", null);
DateTime tungay = DateTime.ParseExact(dateTuNgay.Text, "yyyy-MM-dd", null);
if (denngay >= tungay)
{
songay = ((int)(denngay - tungay).TotalDays) + 1;
int congchuan = connectDatabase.BusinessDaysUntil(tungay, denngay,NgayNghi);
txtCongChuan.Text = congchuan.ToString();
for (int i = 0; i < songay; i++)
{
TemplateField tDate = new TemplateField();
tDate.HeaderText = (tungay.AddDays(i)).ToString("dd/MM");
gridChamCong.Columns.Add(tDate);
}
}
else
{
lbLoi.ForeColor = Color.Red;
lbLoi.Text = "Đến ngày phải lớn hơn Từ ngày";
}
BindGridChamCong();
}
//----------------------------------------CHẤM CÔNG------------------------------
protected void btnLuu_Click(object sender, EventArgs e)
{
DateTime denngay = DateTime.ParseExact(dateDenNgay.Text, "yyyy-MM-dd", null);
DateTime tungay = DateTime.ParseExact(dateTuNgay.Text, "yyyy-MM-dd", null);
DateTime ngaytao = DateTime.ParseExact(dateNgayTao.Text, "yyyy-MM-dd", null);
//get id phiếu lớn nhất
txtPhieuID.Text = oPhieuChamCong.getMaxID() + "";
//-------------------------------------------------------------------------------------------------
//Insert Phiếu chấm công
oPhieuChamCong.insertPhieuChamCong(txtTenPhieu.Text, Int32.Parse(ddlDonvi.SelectedValue), tungay, denngay, 1, Int32.Parse( connectDatabase.ID_Nhanvien)
, ngaytao, txtGhiChu.Text);
//-------------------------------------------------------------------------------------------------------
//Insert phiếu chấm công tổng
for (int i = 0; i < gridChamCong.Rows.Count; i++)
{
string mang = "";
int ngaycongtinhluong = Int32.Parse(txtCongChuan.Text.Trim());
int angiuaca = ngaycongtinhluong;
int lhs = ngaycongtinhluong;
int lcb = ngaycongtinhluong;
int phep = 0;
for (int j = 0; j < gridChamCong.Columns.Count-8 ; j++)
{
DateTime ngayxet = tungay.AddDays(j);
if (ngayxet.DayOfWeek != DayOfWeek.Saturday && ngayxet.DayOfWeek != DayOfWeek.Sunday)
{
System.Web.UI.WebControls.DropDownList ddlChamcong = new System.Web.UI.WebControls.DropDownList ();
int slcontrol = gridChamCong.Rows[i].Cells[j + 8].Controls.Count;
ddlChamcong = ( System.Web.UI.WebControls.DropDownList)gridChamCong.Rows[i].Cells[j+8].FindControl("ddlKiHieuChamCong");
string congngay = ddlChamcong.Text.Trim();
mang = mang + ngayxet.Date.ToString("yyyy-MM-dd") + "," + congngay;
mang = mang + ";";
if (!congngay.Equals("P") && !congngay.Equals("X") && !congngay.Equals("L"))
{
lhs--;
angiuaca--;
ngaycongtinhluong--;
lcb--;
}
else if (congngay.Equals("P") || congngay.Equals("L"))
{
lhs--;
angiuaca--;
ngaycongtinhluong--;
phep++;
}
}
}
System.Web.UI.WebControls.TextBox txtECustCode = (System.Web.UI.WebControls.TextBox)gridChamCong.Rows[i].Cells[6].FindControl("txtCa3");
int ca3 = Int32.Parse(txtECustCode.Text);
int id_phieu = Int32.Parse(txtPhieuID.Text.Trim());
int id_nv = Int32.Parse(gridChamCong.Rows[i].Cells[0].Text);
oPhieuChamCongTong.insertPhieuChamCongTong(id_phieu, id_nv
, lhs, lcb, angiuaca, ngaycongtinhluong,ca3, phep, mang, "");
}
//----------------------------------------------------------------------------------------------------
//ghi log
connectDatabase.insert_Log("updatePhieuChamCong", connectDatabase.TenTK, "Cập nhật/Thêm phiếu chấm công "+ txtPhieuID.Text + txtTenPhieu.Text + " Đơn vị: " + ddlDonvi.Text, DateTime.Now);
Response.Redirect("~/Quanly/ChiTietChamCong.aspx");
}
单击 时出现问题btnLuu_Click
,gridChamCong.Rows[i].Cells[6].FindControl("txtCa3")
并
gridChamCong.Rows[i].Cells[j+8].FindControl("ddlKiHieuChamCong")
返回 null。如果我取消注释ddlKiHieuChamCong.AutoPostBack = true
,当我更改 的选定索引时ddlKiHieuChamCong
,生成的列中的所有控件都变为空。
在GridView的事件里面OnRowDataBound
,添加TextBox、DropDownLists等控件的过程
解决方案
推荐阅读
- python - 为什么更新字典会从我的嵌套数组中删除其余的字典?
- javascript - 我是否需要 XMLHttpRequest 才能使用 JavaScript 更改 JSON 文件值?
- php - PHP XML 不使用 SimpleXml 解析
- yaml - YAML 中的多个引用在第 43 行重复映射键错误
- javascript - 如何在笔记应用程序中获得一致的 javascript 语法突出显示?
- php - 我是新手,需要帮助 xD 我在 sql 中有错误,但我不知道在哪里。拉拉维尔 7
- oracle-apex - 带有多选功能的弹出式 LOV
- python - 编译 gstreamer (python kivy) 应用程序时出现 SDL12 错误
- r - Selenium - rsDriver(browser = "firefox") -> 连接被拒绝
- node.js - 如何在 HAPI 中从 MySQL 返回结果