GridView에 행을 프로그래밍 방식으로 삽입하는 방법은 무엇입니까?
문제
ASP.NET 2.0에 행 선택 링크가있는 데이터 펀드 뷰가 있습니다. 행이 선택되면 다른 그리드 등을 중첩하기 위해 선택한 행 아래 테이블 행을 프로그래밍 방식으로 추가하려고합니다.
나는 고객과 기사를 위해 이것을 조사하고 있으며, 오늘 밤 내 Google-FU가 강하지 않는다고 생각합니다. 제안이 있습니까?
편집 : 실제로 작동하는 솔루션이 있었지만 Visual Studio는 어떻게 든 열광했습니다. vs를 폐쇄하고 다시 열고 모든 것을 재건하면 문제가 해결되었습니다 ;-)
내 솔루션은 아래에 게시되어 있습니다. 가능하면 더 나은 방법을 알려주는 방법을 알려주십시오. 감사!
해결책
나는 그것을 알아 낸 것 같아요. 다음은 작동하는 것처럼 보이는 솔루션입니다. 사용자 컨트롤을 사용하여 개선 될 수 있지만 이것이 요점입니다.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow &&
(e.Row.RowState & DataControlRowState.Selected) > 0)
{
Table tbl = (Table)e.Row.Parent;
GridViewRow tr = new GridViewRow(e.Row.RowIndex + 1, -1,
DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
TableCell tc = new TableCell();
tc.ColumnSpan = GridView1.Columns.Count;
tc.Controls.Add(
makeChildGrid(Convert.ToInt32(
((DataRowView)e.Row.DataItem)["ROW_ID_FIELD"])));
tr.Cells.Add(tc);
tbl.Rows.Add(tr);
}
}
protected GridView makeChildGrid(int id)
{
GridView gv = new GridView();
SqlDataSource sqlds = new SqlDataSource();
sqlds.DataSourceMode = SqlDataSourceMode.DataSet;
sqlds.ConnectionString = SqlDataSource1.ConnectionString;
sqlds.SelectCommand = "SELECT * from MY_TABLE_NAME " +
"WHERE KEY_FIELD = " + id.ToString();
DataView dv = (DataView)sqlds.Select(DataSourceSelectArguments.Empty);
gv.DataSource = dv;
gv.DataBind(); //not sure this is necessary...?
return gv;
}
다른 팁
이 코드를 공유해 주셔서 감사합니다.
나는 똑같은 일을하려고 노력하고 있습니다 (중첩 그리드 뷰 생성). 실제로 GridView를 직접 만들 필요는 없습니다. 대신, 당신은 단지 태그 내에서 컨트롤을 감쌀 수 있습니다. 나는 여기서 예를 보았다 http://www.codeproject.com/kb/aspnet/editnestedgridview.aspx?msg=3089755#xx33089755xx
개발자가 태그 내에서 두 번째 그리드 뷰 컨트롤을 마무리하면 GV 컨트롤을 중첩 시켰음을 알 수 있습니다.
그가 코드로하고있는 일을 할 수 있다면 더 효과적입니다. 선택한 모든 필드를 표시 할 필요는 없습니다 !! 또한 자녀 그리드 뷰에 일부 컨트롤을 시각적으로 추가 할 수 있습니다.
코드를 VB로 변환하고 완벽하게 작동했습니다.
감사