【问题标题】:Problem to programmatically add rows to GridView with pre-defined columns以编程方式将行添加到具有预定义列的 GridView 的问题
【发布时间】:2011-02-22 23:42:59
【问题描述】:

给定这样定义的 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();

问题是这样的:

网格中的“FilePath”和“AttachmentID”字段设置正确,但是 CheckBox 控件从未正确设置;它始终处于未选中状态。

我的问题:

在创建新行时,如何从 C# 中获取此 CheckBox 字段集?

附:我不确定我是否首先正确地创建了行。

【问题讨论】:

    标签: c# .net asp.net gridview


    【解决方案1】:

    使用建议的更改反理智,您需要更改 aspx 标记,如下所示:

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

    【讨论】:

      【解决方案2】:

      我相信您会希望将列(在 DataTable 中)设置为布尔类型而不是复选框,因为它应该是数据源。

      【讨论】:

      • 并将其设置为 cb.Checked 而不是 cb
      • 我尝试了一个布尔类型并将其设置为 true,但这没有任何区别。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多