|
|
|
สอบถามปัญหาเรื่อง GridView RowEditing เมื่อกดปุ่ม Edit แล้วเกิด Row ว่าง 1 บรรทัด ซึ่งไม่ใช่บรรทัดที่ต้องการแก้ไขข้อมูล |
|
|
|
|
|
|
|
เมื่อกดปุ่ม Edit แล้วเกิด Row ว่าง 1 บรรทัด ซึ่งไม่ใช่บรรทัดที่ต้องการแก้ไขข้อมูล
Row ว่าง 1 บรรทัดที่เกิดขึ้น
ต้องกดปุ่ม Edit อีกครั้ง ถึงจะได้บรรทัดที่ต้องการแก้ไขข้อมูล
ซึ่งได้ทำการ Debug แล้ว พบที่มาของปัญหาแล้ว แต่ไม่สามารถแก้ไขได้
อยากจะให้ผู้รู้ช่วยแนะนำหน่อยค่ะ ปัญหาอยู่ที่ gvDesc_RowCreated ค่ะ
Code (C#)
string strPreviousRowID = string.Empty;
int intSubTotalIndex = 1;
double dblSubTotalAmount = 0;
double dblGrandTotalAmount = 0;
private void LoadGrid()
{
double TotalAudit = 0.0;
double TotalMarketing = 0.0;
DataTable dt = (DataTable)Session["gvDesc"];
if (dt.Rows.Count > 0)
{
dt.DefaultView.Sort = "FundType";
gvDesc.DataSource = dt;
gvDesc.DataBind();
foreach (DataRow dr in dt.Rows)
{
if (dr["FundType"].ToString() == "Current Year Audit Fund")
{
TotalAudit = TotalAudit + Convert.ToDouble(dr["Amount"]);
}
else
{
TotalMarketing = TotalMarketing + Convert.ToDouble(dr["Amount"]);
}
}
btnCreate.Visible = true;
Session["gvDesc"] = dt.DefaultView.ToTable();
}
else
{
gvDesc.DataSource = dt;
gvDesc.DataBind();
btnCreate.Visible = false;
}
dt = null;
}
protected void gvDesc_RowEditing(object sender, GridViewEditEventArgs e)
{
gvDesc.EditIndex = e.NewEditIndex;
LoadGrid();
}
protected void gvDesc_RowCreated(object sender, GridViewRowEventArgs e)
{
bool IsSubTotalRowNeedToAdd = false;
bool IsGrandTotalRowNeedToAdd = false;
if ((strPreviousRowID != string.Empty) && (DataBinder.Eval(e.Row.DataItem, "FundType") != null))
if (strPreviousRowID != DataBinder.Eval(e.Row.DataItem, "FundType").ToString())
IsSubTotalRowNeedToAdd = true;
if ((strPreviousRowID != string.Empty) && (DataBinder.Eval(e.Row.DataItem, "FundType") == null))
{
IsSubTotalRowNeedToAdd = true;
IsGrandTotalRowNeedToAdd = true;
intSubTotalIndex = 0;
}
if (IsSubTotalRowNeedToAdd)
{
GridView grdViewProducts = (GridView)sender;
// Creating a Row
GridViewRow SubTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);
//Adding Total Cell
TableCell HeaderCell = new TableCell();
HeaderCell.Text = "Total :";
HeaderCell.HorizontalAlign = HorizontalAlign.Right;
HeaderCell.ColumnSpan = 6; // For merging first, second row cells to one
HeaderCell.CssClass = "txtBold";
SubTotalRow.Cells.Add(HeaderCell);
//Adding Total Amount Column
HeaderCell = new TableCell();
HeaderCell.Text = string.Format("{0:#,###.00}", dblSubTotalAmount);
HeaderCell.HorizontalAlign = HorizontalAlign.Center;
HeaderCell.CssClass = "txtBold";
SubTotalRow.Cells.Add(HeaderCell);
//Adding the Row at the RowIndex position in the Grid
//*** ปัญหาอยู่ตรงนี้ค่ะ ถ้าปิดบรรทัดนี้ไป จะไม่เกิดปัญหา แต่ข้อมูล Total ก็จะไม่แสดงด้วยเช่นกันค่ะ ***//
grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, SubTotalRow);
intSubTotalIndex++;
dblSubTotalAmount = 0;
}
if (IsGrandTotalRowNeedToAdd)
{
GridView grdViewProducts = (GridView)sender;
// Creating a Row
GridViewRow GrandTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);
//Adding Grand Total Cell
TableCell HeaderCell = new TableCell();
HeaderCell.Text = "<br/>Grand Total :";
HeaderCell.HorizontalAlign = HorizontalAlign.Right;
HeaderCell.ColumnSpan = 6; // For merging first, second row cells to one
HeaderCell.CssClass = "txtBold";
GrandTotalRow.Cells.Add(HeaderCell);
//Adding Total Revenue Column
HeaderCell = new TableCell();
HeaderCell.Text = "<br/>" + string.Format("{0:#,###.00}", dblGrandTotalAmount);
HeaderCell.HorizontalAlign = HorizontalAlign.Center;
HeaderCell.CssClass = "txtBold";
GrandTotalRow.Cells.Add(HeaderCell);
//Adding the Row at the RowIndex position in the Grid
grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex, GrandTotalRow);
}
}
protected void gvDesc_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
strPreviousRowID = DataBinder.Eval(e.Row.DataItem, "FundType").ToString();
double dblAmount = Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "Amount").ToString());
dblSubTotalAmount += dblAmount;
dblGrandTotalAmount += dblAmount;
if (strPreviousRowID == "Current Year Audit Fund")
{
lblTotalAudit.Text = string.Format("{0:#,###.00}", dblSubTotalAmount);
}
else
{
lblTotalMarketing.Text = string.Format("{0:#,###.00}", dblSubTotalAmount);
}
Label lblActionCode = (Label)e.Row.FindControl("lblActionCode");
if (lblActionCode != null)
{
if (Convert.ToString(DataBinder.Eval(e.Row.DataItem, "FundType")) == "Current Year Audit Fund")
{
lblActionCode.Text = Session["ActionCode1"].ToString();
}
else
{
lblActionCode.Text = Session["ActionCode2"].ToString();
}
}
HiddenField hdfID = (HiddenField)e.Row.FindControl("hdfID");
LinkButton lbtnContact = (LinkButton)e.Row.FindControl("lbtnContact");
Button btnEdit = (Button)e.Row.FindControl("btnEdit");
if (Session["DataContact"] != null)
{
lbtnContact.Visible = false;
DataTable dtDataContact = (DataTable)Session["DataContact"];
for (int i = 0; i < dtDataContact.Rows.Count; i++)
{
string AssetID = dtDataContact.Rows[i]["AssetID"].ToString();
if (hdfID.Value == AssetID)
{
lbtnContact.Visible = true;
btnEdit.Visible = false;
break;
}
else
{
lbtnContact.Visible = false;
}
}
}
else
{
lbtnContact.Visible = false;
}
}
}
Tag : .NET, Web (ASP.NET), C#
|
ประวัติการแก้ไข 2014-02-26 14:25:33
|
|
|
|
|
Date :
2014-02-26 14:23:28 |
By :
yoknarak |
View :
1253 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันคือ Edit Item หรือเปล่าครับ พวก LoadGrid จะต้องโหลดครั้งเดียวครับ ตอนที่ PostBack ไม่ต้อง Bind ใหม่ครับ
Code (C#)
if(!Page.IsPostBack)
{
LoadGrid();
}
|
|
|
|
|
Date :
2014-02-27 22:09:39 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันเป็น Footer หรือเปล่าครับ ลองกำหนด Footer ของ False ดูครับ
|
|
|
|
|
Date :
2014-03-01 10:35:14 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|