如何在共享点列表的编辑表单中将ID字段显示为只读?

时间:2010-07-21 14:59:26

标签: sharepoint wss-3.0 sharepoint-list

我需要在共享点列表的编辑表单中显示ID字段。

有办法吗?我尝试了一个计算字段而没有。 我知道我可以在视图中看到ID字段,如果我显示为访问模式。 我正在使用WSS3.0

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

您可以通过非常轻松地创建自定义编辑表单来完成此操作。我通常将它粘贴到webpart中呈现的HTML表中。可能有更好的方法可以做到这一点,但它很简单并且有效。

您要查看的关键行是spFormField.ControlMode。这告诉SharePoint如何显示控件(无效,显示,编辑,新建)。那么你要做的是检查你的spField.InternalName ==“ID”是否是,如果是,则将ControlMode设置为Display。

其余部分只是为了呈现列表的其余部分。

希望这有帮助。

HtmlTable hTable = new HtmlTable();
HtmlTableRow hRow = new HtmlTableRow();
HtmlTableCell hCellLabel = new HtmlTableCell();
HtmlTableCell hCellControl = new HtmlTableCell();
SPWeb spWeb = SPContext.Current.Web;

// Get the list we are going to work with
SPList spList = spWeb.Lists["MyList"];

// Loop through the fields
foreach (SPField spField in spList.Fields)
{
   // See if this field is not hidden or hide/show based on your own criteria
   if (!spField.Hidden && !spField.ReadOnlyField && spField.Type != SPFieldType.Attachments && spField.StaticName != "ContentType")
   {
     // Create the label field
     FieldLabel spLabelField = new FieldLabel();
     spLabelField.ControlMode = _view; 
     spLabelField.ListId = spList.ID;
     spLabelField.FieldName = spField.StaticName;

     // Create the form field
     FormField spFormField = new FormField();

// Begin: this is your solution here.
     if (spField.InteralName == "ID")
     { spFormField.ControlMode = SPControlMode.Display; }
     else
     { spFormField.ControlMode = _view; }
// End: the end of your solution.

     spFormField.ListId = spList.ID;
     spFormField.FieldName = spField.InternalName;

     // Add the table row
     hRow = new HtmlTableRow();
     hTable.Rows.Add(hRow);

     // Add the cells
     hCellLabel = new HtmlTableCell();
     hRow.Cells.Add(hCellLabel);
     hCellControl = new HtmlTableCell();
     hRow.Cells.Add(hCellControl);

     // Add the control to the table cells
     hCellLabel.Controls.Add(spLabelField);
     hCellControl.Controls.Add(spFormField);

     // Set the css class of the cell for the SharePoint styles
     hCellLabel.Attributes["class"] = "ms-formlabel";
     hCellControl.Attributes["class"] = "ms-formbody";
   }

}