asp.net 동적 폼 의 데이터 페이지

7479 단어 asp.net동적 폼
그러나 문제 가 생 겼 습 니 다.서로 다른 학과 의 학생 들 의 과목 이 다 릅 니 다.그러면 우 리 는 데이터 베 이 스 를 디자인 할 때 보통 학생,특정한 과목 의 성적 을 기록 합 니 다.그러면 이 럴 때 우 리 는 줄 을 옮 기 는 논리 적 처 리 를 해 야 합 니 다.해결 방법:GridView 를 사용 하여 폼 을 만 듭 니 다.이것 은 실현 하기 가 비교적 번 거 로 울 수 있 습 니 다.목록 에 링크 를 표시 하려 면 더욱 불가능 합 니 다.html 를 생 성하 여 페이지 에 출력 합 니 다.이것 은 비교적 유연 하고 편리 합 니 다.기본 기능 점:동적 생 성 헤더;데이터 페이지 나 누 기;데이터 조회;각 성적 을 하이퍼링크 하여 내 역 보기;  페이지 코드
 
<div id="dataDiv1">
  <asp:Literal ID="labtable" runat="server"></asp:Literal>
  <div class="toolBlock" style="border-top:solid 1px #C0CEDF; padding-top:5px">
<bw:VirtualPager ID="VirtualPager1" runat="server" ItemsPerPage="10" OnPageIndexChanged="VirtualPager1_PageIndexChanged" />
</div>
</div>
배경 코드(html 문자열 생 성)
 
/// <summary>
/// table .
/// Step1: .
/// Step2: .
/// Step3: .
/// Step4: .
/// </summary>
protected void BindTable()
{
labtable.Text = string.Empty;
// .
string year = DropDownImportYear.SelectedValue;
string month = DropDownImportMonth.SelectedValue;
string group_KH_Date = year + month;
GroupService groupService = new GroupService();
DataTable dtGroup = groupService.GetByTemplateCodeAndGroup_KH_Date(TemplateCode, group_KH_Date);
if (dtGroup.Rows.Count > 0)
{
Guid groupID = (Guid)DbUtils.ToGuid(dtGroup.Rows[0]["ID"]);
int groupStutas = DbUtils.ToInt32(dtGroup.Rows[0]["GroupStutas"].ToString());
DataTable dtCells = personalGradeService.GetDistinctTemplateItemNameByGroupID(groupID);
GroupID = groupID.ToString();
if (dtCells.Rows.Count > 0)
{
int cellsCount = 0;// .
StringBuilder strtable = new StringBuilder();
strtable.AppendFormat("<table cellpadding=\"0\" cellspacing=\"0\" class=\"tblClass\">");
strtable.AppendFormat("<tr>");
strtable.AppendFormat("<th> </th>< /span>");
cellsCount = dtCells.Rows.Count;
for (int i = 0; i < cellsCount; i++)
{
strtable.AppendFormat("<th>{0}</th>", dtCells.Rows[i]["Name"].ToString());
}
strtable.AppendFormat("</tr>");
DataTable dtGradeData = GetData(cellsCount);
int cursor = 1;// .
string userName = string.Empty;
string realName = string.Empty;
for (int i = 0; i<dtGradeData.Rows.Count; i++)
{
if (cursor == 1)
{
userName = dtGradeData.Rows[i]["UserName"].ToString();
realName = dtGradeData.Rows[i]["RealName"].ToString();
strtable.AppendFormat("<td width=\"12%\">{0}</td>", realName);
}
string id = dtGradeData.Rows[i]["ID"].ToString();
string templateItemCode = dtGradeData.Rows[i]["TemplateItemCode"].ToString();
strtable.AppendFormat("<td width=\"50px\">");

string GradeData = dtGradeData.Rows[i]["GradeData"].ToString();
if (!string.IsNullOrEmpty(GradeData) && GradeData != "0")
{
GradeData=Math.Round(decimal.Parse(GradeData), 2).ToString();
//
}
strtable.AppendFormat("{0}", GradeData);
//
if (groupStutas != (int)Botwave.MRPS.Constants.GroupStutas.FinishPush)
{
strtable.AppendFormat("<br /><a style=\"text-decoration:underline\" class=\"thickbox\" href='UserGradeDataEdit.aspx?ID={0}&BeModifer={1}&KeepThis=true&TB_iframe=true&height=250&width=500'>", id, userName);
strtable.AppendFormat("<img src=\"../res/gradeedit.gif\" align=\"baseline\" title=\" \" />");
strtable.AppendFormat("</a>");
}
strtable.AppendFormat("&nbsp;<a target=\"_blank\" style=\"text-decoration:underline\" href='http://www.cnblogs.com/CheckObjectManager/pages/LogScoreChangeDetail.aspx?GroupId={0}&TemplateCode={1}&TemplateItemCode={2}&UserName={3}&returnUrl='>", groupID, TemplateCode, templateItemCode, userName);
strtable.AppendFormat("<img src=\"../res/gradelog.gif\" align=\"baseline\" title=\" \" />");
strtable.AppendFormat("</a>");
strtable.AppendFormat("</td>");
if (cursor < cellsCount)
cursor++;
else
{
strtable.AppendFormat("</tr>");
cursor = 1;
}
}
strtable.AppendFormat("</table>");
labtable.Text = strtable.ToString();
}
}
}
몇 가지 보조 방법(페이지 문 제 를 어떻게 처리 하 는 지,이것 은 cellsCount 파라미터 의 사용 과 관련 이 있 습 니 다.cellsCount 표시 과목 수)
 
protected void btnSearch_Click(object sender, EventArgs e)
{
SearchNow = true;
VirtualPager1.CurrentPageIndex = 1;
BindTable();
}
protected void VirtualPager1_PageIndexChanged(object sender, Botwave.Web.Controls.PageChangedEventArgs e)
{
BindTable();
}
/// <summary>
/// .
/// </summary>
/// <returns></returns>
private DataTable GetData(int cellsCount)
{
int nRecordCount = 0;
string condition = "";
string filterName = txtUserName.Text.Trim();// .
StringBuilder sb = new StringBuilder();
sb.AppendFormat(" GroupID ='{0}'", GroupID);
if (!string.IsNullOrEmpty(filterName))
sb.AppendFormat(" AND (UserName like '%{0}%' OR RealName like '%{0}%')", filterName);
condition = sb.ToString();
if (SearchNow)// , , , CurrentPageIndex, .
VirtualPager1.CurrentPageIndex = 0;
DataTable dt = personalGradeService.GetGradeData(VirtualPager1.CurrentPageIndex, VirtualPager1.ItemsPerPage * cellsCount, condition, ref nRecordCount);
VirtualPager1.TotalRecordCount = nRecordCount / cellsCount;
VirtualPager1.DataBind();
SearchNow = false;// .
return dt;
}
업무 논리(페이지)
 
public System.Data.DataTable GetGradeData(int currentPageIndex, int pageSize, string condition, ref int nRecordCount)
{
string fieldShow = " UserID,TemplateCode,TemplateItemCode,GradeData,ID,UserName,RealName ";
string fieldOrder = " UserName ASC,TemplateItemCode ASC ";
string where = condition;
if (String.IsNullOrEmpty(where))
{
where = "1=1";
}
return IBatisDbHelper.GetPagedList("dbo.vw_UserGradeData", "ID", currentPageIndex, pageSize, fieldShow, fieldOrder, where, ref nRecordCount);
}
주의사항:을 사용 하여 페이지 에 html 를 출력 하여 폼 을 표시 하려 면 문자열 의 길 이 를 주의해 야 합 니 다.html 가 너무 길 면 오류 가 발생 합 니 다.Literal 은 8000 글자 의 제한 이 있 기 때 문 입 니 다.데이터베이스 에서 데 이 터 를 정렬 해 야 데이터 와 헤더 가 일일이 대응 하 는 것 을 확보 할 수 있다.여기 에는 조회 한 데이터 가 똑 같이 많은 기록 을 포함 한 다 는 전제 가 있다.예 를 들 어 친구 A 와 친구 B 의 과목 이 똑 같이 많다.다 르 기 때문에 이 동적 표 는 아무런 의미 가 없다.정말 다 르 면 만 들 수 있 지만 귀 찮 을 수도 있 습 니 다.

좋은 웹페이지 즐겨찾기