사용자 문서를 보유한 데이터베이스가 있습니다. 사용자는 각 문서에 자신의 메타 데이터를 저장할 수 있으며 20 개의 "키"필드가 있습니다. 각 사용자는 1 ~ 20 개의 열을 사용하고 이름을 바꾸고 그리드 뷰에서 순서대로 정렬 할 수 있습니다.사용자 정의 동적 테이블 생성
이 문서 테이블 지금이
Documents:
ID int primary key identity,
SiteID int foreign key references sites(id),
PDFFolder varchar(100),
Key1 varchar(300),
keyN varchar(300); //Upto 20 keys
처럼 보인다 나는 다른 테이블라는 키 이름이 있습니다
이KeyNames:
ID int primary key identity,
SiteId int foriegn key references sites(id),
KeyName1 varchar(50),
KeyOrder1 int, //1 is Textbox, 2 is Multi Choice, 3 is date ect
KeyType1 int,
KeyNameN varchar(50), //Repeat 20times
KeyOrderN int,
KeyTypeN int
내가 사용하고있는 현재의 방법은 특정 사용자에 대한 문서의 DataTable을 얻을 것입니다 (사이트를 소유하고있는 사람)
DataTable documents = GetDocuments(int userId, int siteId);
그런 다음 주문과 ea의 제목을 변경합니다. 채널 키, 만약 순서 < 0 다음의 제거
//Set Order of Keys
if ((keys.KeyOrder1 <0) || (keys.KeyOrder1 == null))
{
documentsTable.Columns.Remove("Key1");
}
else
{
documentsTable.Columns["Key1"].SetOrdinal((int)keys.KeyOrder1);
documentsTable.Columns["Key1"].ColumnName = keys.Keyname1;
}
//Repeat 20 times
지금은 단순히 내가 지금 그것을 할 필요가
this.Session["documents"] = documentsTable; //Save to session for future use
gvMail.DataSource = documentsTable;
gvMail.DataBind();
모든 지금을 제외하고 잘 작동 DataTable의 및 바인딩
내있는 gridview의 데이터 소스 설정 사용자는 각 키를 편집하여 데이터베이스에 다시 저장할 수 있습니다. 일을 더 어렵게 만들려면 각 행을 editview에 넣을 때 텍스트 상자 또는 DropDownView가 필요합니다. (미래에는이 예제에서는 JavaScript를 사용하여 날짜 선택기를 만들지 만)나는 내가 가지고있는 많은 문제의 커플은 내가 그것을 인 키 찾아서 유형을 찾기 위해 모든 키를 통해 코드를주기를 20 회 반복이 필요하다
protected void btnEdit_Click(Object sender, EventArgs e)
{
Button btn = sender as Button;
GridViewRow row = (GridViewRow)btn.NamingContainer;
if (btn.Text == "Edit")
{
for (int i = 0; i < row.Cells.Count; i++)
{
//Get Header
string header = gvMail.HeaderRow.Cells[i].Text;
//Get Keys
KeyName keys = db.GetKeys(SiteID);
//Cycle through keys to find right key
//ie if (keys.KeyName1 == header)
// {
// switch (keys.KeyType1)
{
case 1: //Add Textbox
case 2: //add drop down box code
// }
}
과정을 반전 시도 . 나는에 의해 컨트롤을 추가 할 때
는 그 다음 문제는 다음과 같습니다
TextBox txtBox = new TextBox();
txtBox.Text = row.Cells[i].Text;
row.Cells[i].Controls.Add(txtBox);
가 다시 게시 후 존재하지 않습니다 .. 당신이 텍스트 상자를 만들 수있는 DataGridView에 템플릿 열을 사용하지 않는 이유는
문제는 모든 사용자의 gridview가 다를 수 있습니다. 키 열의 포인트는 1이라는 사용자가 key1을 Date라는 날짜 열로 사용하기로 결정할 수 있습니다. 다른 사용자가 Key1을 열 이름 Counteries를 갖는 다중 선택으로 사용할 수 있습니다 – michael