2011-02-22 49 views
0

添加的GridView鉴于这样定义GridView控件:问题以编程的行具有预先定义的列

<asp:GridView 
     ID="AttachedFilesGridView" 
     runat="server" 
     AllowSorting="true" 
     AllowPaging="false" 
     CellPadding="5" 
     AutoGenerateColumns="false" 
     CssClass="wsajax_DlgCodeBox"> 
     <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
      <asp:CheckBox ID="CheckSelect" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField Datafield="FilePath" HeaderText="File Path" SortExpression="FilePath" /> 
     <asp:BoundField Datafield="AttachmentID" HeaderText="Attachment ID" /> 
     </Columns> 
    </asp:GridView> 

我试图生成使用此代码在C#在服务器侧的网格视图中的行:

DataTable dt = new DataTable(); 
dt.Columns.Add(new DataColumn("CheckSelect", typeof(CheckBox))); // <<<--- ????? 
dt.Columns.Add(new DataColumn("FilePath", typeof(string))); 
dt.Columns.Add(new DataColumn("AttachmentID", typeof(string))); 

string errMsg = String.Empty; 
char[] delimiters = { ',' }; 
string[] pendingsIDs = PendingFileAttachments.Value.Split(delimiters,  StringSplitOptions.RemoveEmptyEntries); 
foreach (string adapterID in pendingsIDs) 
{ 
    FileAdapter adapter = FileAdapter.LoadFileAdapter(profile, new Guid(adapterID), ref errMsg); 
    if (adapter != null) 
    { 
     DataRow dr = dt.NewRow(); 
     CheckBox cb = new CheckBox(); 
     cb.Checked = FileAdapter.IsReserved; 
     cb.ID = "CheckSelect"; 
     dr["CheckSelect"] = cb; <<<---????? 
     dr["FilePath"] = adapter.GetPartialFilePath(); 
     dr["AttachmentID"] = adapter.ObjectID.ToString("N"); 
     dt.Rows.Add(dr);  
    } 
} 

AttachedFilesGridView.DataSource = dt; 
AttachedFilesGridView.DataBind(); 

问题是这样的:

的“文件路径”和“附件ID”被在网格正确设置字段,然而,复选框控件从不正确设置;它总是没有检查。

我的问题:

我如何获得这个复选框字段,因为我创造了新行从C#设置?

P.S.我不知道我是否正确创建行。

回答

2

使用变化antisanity建议,你需要改变ASPX标记像这样:

.... 
     <ItemTemplate> 
     <asp:CheckBox ID="CheckSelect" runat="server" Checked='<%# Eval("CheckSelect")' /> 
     </ItemTemplate> 
.... 
+0

谢谢。 Eval宏做了诡计! – Escovado 2011-02-23 00:16:14

1

我相信你会想让列(在DataTable中)类型为布尔型而不是复选框,因为它应该是数据源。

+0

并将其设置为'cb.Checked'代替cb'的'。 – mellamokb 2011-02-22 23:52:06

+0

我尝试了一个boolen类型并将其设置为true,但这没有什么区别。 – Escovado 2011-02-22 23:52:37

相关问题