BoundColumn.ReadOnly Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví hodnotu, která označuje, zda položky v objektu BoundColumn lze upravit.
public:
virtual property bool ReadOnly { bool get(); void set(bool value); };
public virtual bool ReadOnly { get; set; }
member this.ReadOnly : bool with get, set
Public Overridable Property ReadOnly As Boolean
Hodnota vlastnosti
true
pokud položky v objektu BoundColumn nelze upravovat, jinak hodnota false
. Výchozí hodnota je false
.
Příklady
Následující příklad ukazuje, jak použít ReadOnly vlastnost k určení, že BoundColumn je jen pro čtení. Soubor .aspx definuje tři ovládací prvky BoundColumn a nastaví sloupec Item jen pro čtení.
<%@ Page language="c#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>BoundColumn Example</title>
</head>
<script runat="server">
// The Cart and CartView objects temporarily store the data source
// for the DataGrid control while the page is being processed.
DataTable Cart = new DataTable();
DataView CartView;
void Page_Load(Object sender, EventArgs e)
{
// With a database, use a select query to retrieve the data.
// Because the data source in this example is an in-memory
// DataTable, retrieve the data from session state if it exists;
// otherwise, create the data source.
GetSource();
// The DataGrid control maintains state between posts to the
// server; therefore it only needs to be bound to a data source
// the first time the page is loaded or when the data source
// is updated.
if (!IsPostBack)
{
BindGrid();
}
}
void ItemsGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
// Set the EditItemIndex property to the index of the item
// clicked in the DataGrid control to enable editing for that
// item. Be sure to rebind the DateGrid to the data source
// to refresh the control.
ItemsGrid.EditItemIndex = e.Item.ItemIndex;
BindGrid();
}
void ItemsGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
// Set the EditItemIndex property to -1 to exit editing mode.
// Be sure to rebind the DateGrid to the data source to
// refresh the control.
ItemsGrid.EditItemIndex = -1;
BindGrid();
}
void ItemsGrid_Update(Object sender, DataGridCommandEventArgs e)
{
// Retrieve the text boxes that contain the values to update.
// For bound columns, the edited value is stored in a TextBox.
// The TextBox is the 0th control in a cell's Controls collection.
// Each cell in the Cells collection of a DataGrid item represents
// a column in the DataGrid control.
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];
// Retrieve the updated values.
String item = e.Item.Cells[1].Text;
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
// With a database, use an update command to update the data. Because
// the data source in this example is an in-memory DataTable, delete
// the old row and replace it with a new one.
// Remove the old entry and clear the row filter.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
{
CartView.Delete(0);
}
CartView.RowFilter = "";
// Add the new entry.
dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
// Set the EditItemIndex property to -1 to exit editing mode.
// Be sure to rebind the DateGrid to the data source to refresh
// the control.
ItemsGrid.EditItemIndex = -1;
BindGrid();
}
void BindGrid()
{
// Set the data source and bind to the Data Grid control.
ItemsGrid.DataSource = CartView;
ItemsGrid.DataBind();
}
void GetSource()
{
// For this example, the data source is a DataTable that is
// stored in session state.
// If the data source does not exist, create it; otherwise,
// load the data.
if (Session["ShoppingCart"] == null)
{
// Create the sample data.
DataRow dr;
// Define the columns of the table.
Cart.Columns.Add(new DataColumn("Qty", typeof(String)));
Cart.Columns.Add(new DataColumn("Item", typeof(String)));
Cart.Columns.Add(new DataColumn("Price", typeof(String)));
// Store the table in session state to persist its values
// between posts to the server.
Session["ShoppingCart"] = Cart;
// Populate the DataTable with sample data.
// The generated table row data looks like this:
//
// Qty Item Price
// 1 Item 1 2.46
// 2 Item 2 3.69
// 1 Item 3 4.92
// 2 Item 4 6.15
for (int i = 1; i <= 4; i++)
{
dr = Cart.NewRow();
if (i % 2 != 0)
{
dr[0] = "2";
}
else
{
dr[0] = "1";
}
dr[1] = "Item " + i.ToString();
dr[2] = (1.23 * (i + 1)).ToString();
Cart.Rows.Add(dr);
}
}
else
{
// Retrieve the sample data from session state.
Cart = (DataTable)Session["ShoppingCart"];
}
// Create a DataView and specify the field to sort by.
CartView = new DataView(Cart);
CartView.Sort="Item";
return;
}
</script>
<body>
<form runat="server" id="form1">
<h3>BoundColumn ReadOnly Example</h3>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
OnEditCommand="ItemsGrid_Edit"
OnCancelCommand="ItemsGrid_Cancel"
OnUpdateCommand="ItemsGrid_Update"
AutoGenerateColumns="false"
runat="server">
<HeaderStyle backcolor="#aaaadd"></HeaderStyle>
<Columns>
<asp:EditCommandColumn EditText="Edit" CancelText="Cancel"
UpdateText="Update" HeaderText="Edit Command Column">
<ItemStyle Wrap="False"></ItemStyle>
<HeaderStyle wrap="false"></HeaderStyle>
</asp:EditCommandColumn>
<asp:BoundColumn HeaderText="Item" DataField="Item"
ReadOnly="True" />
<asp:BoundColumn HeaderText="Quantity" DataField="Qty" />
<asp:BoundColumn HeaderText="Price" DataField="Price" />
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<script runat="server">
' The Cart and CartView objects temporarily store the data source
' for the DataGrid control while the page is being processed.
Dim Cart As DataTable = New DataTable()
Dim CartView As DataView
Sub Page_Load(sender as Object, e As EventArgs)
' With a database, use a select query to retrieve the data.
' Because the data source in this example is an in-memory
' DataTable, retrieve the data from session state if it exists;
' otherwise, create the data source.
GetSource()
' The DataGrid control maintains state between posts to the
' server; therefore it only needs to be bound to a data source
' the first time the page is loaded or when the data source
' is updated.
If Not IsPostBack Then
BindGrid()
End If
End Sub
Sub ItemsGrid_Edit(sender As Object, e As DataGridCommandEventArgs)
' Set the EditItemIndex property to the index of the item
' clicked in the DataGrid control to enable editing for that
' item. Be sure to rebind the DateGrid to the data source
' to refresh the control.
ItemsGrid.EditItemIndex = e.Item.ItemIndex
BindGrid()
End Sub
Sub ItemsGrid_Cancel(sender As Object, e As DataGridCommandEventArgs)
' Set the EditItemIndex property to -1 to exit editing mode.
' Be sure to rebind the DateGrid to the data source to
' refresh the control.
ItemsGrid.EditItemIndex = -1
BindGrid()
End Sub
Sub ItemsGrid_Update(sender As Object, e As DataGridCommandEventArgs)
' Retrieve the text boxes that contain the values to update.
' For bound columns, the edited value is stored in a TextBox.
' The TextBox is the 0th control in a cell's Controls collection.
' Each cell in the Cells collection of a DataGrid item represents
' a column in the DataGrid control.
Dim qtyText As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
Dim priceText As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
' Retrieve the updated values.
Dim item As String = e.Item.Cells(1).Text
Dim qty As String = qtyText.Text
Dim price As String = priceText.Text
Dim dr As DataRow
' With a database, use an update command to update the data. Because
' the data source in this example is an in-memory DataTable, delete
' the old row and replace it with a new one.
' Remove the old entry and clear the row filter.
CartView.RowFilter = "Item='" & item & "'"
If CartView.Count > 0 Then
CartView.Delete(0)
End If
CartView.RowFilter = ""
' Add the new entry.
dr = Cart.NewRow()
dr(0) = qty
dr(1) = item
dr(2) = price
Cart.Rows.Add(dr)
' Set the EditItemIndex property to -1 to exit editing mode.
' Be sure to rebind the DateGrid to the data source to refresh
' the control.
ItemsGrid.EditItemIndex = -1
BindGrid()
End Sub
Sub BindGrid()
' Set the data source and bind to the Data Grid control.
ItemsGrid.DataSource = CartView
ItemsGrid.DataBind()
End Sub
Sub GetSource()
' For this example, the data source will be a DataTable that is
' stored in session state.
' If the data source does not exist, create it; otherwise,
' load the data.
If Session("ShoppingCart") Is Nothing Then
' Create the sample data.
Dim dr As DataRow
' Define the columns of the table.
Cart.Columns.Add(New DataColumn("Qty", GetType(String)))
Cart.Columns.Add(New DataColumn("Item", GetType(String)))
Cart.Columns.Add(New DataColumn("Price", GetType(String)))
' Store the table in session state to persist its values
' between posts to the server.
Session("ShoppingCart") = Cart
' Populate the DataTable with sample data.
' The generated table row data look like this:
'
' Qty Item Price
' 1 Item 1 2.46
' 2 Item 2 3.69
' 1 Item 3 4.92
' 2 Item 4 6.15
Dim i As Integer
For i = 1 to 4
dr = Cart.NewRow()
If (i Mod 2) <> 0 Then
dr(0) = "2"
Else
dr(0) = "1"
End If
dr(1) = "Item " & i.ToString()
dr(2) = (1.23 * (i + 1)).ToString()
Cart.Rows.Add(dr)
Next
Else
' Retrieve the sample data from session state.
Cart = CType(Session("ShoppingCart"), DataTable)
End If
' Create a DataView and specify the field to sort by.
CartView = New DataView(Cart)
CartView.Sort="Item"
Return
End Sub
</script>
<head runat="server">
<title>BoundColumn ReadOnly Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>BoundColumn ReadOnly Example</h3>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
OnEditCommand="ItemsGrid_Edit"
OnCancelCommand="ItemsGrid_Cancel"
OnUpdateCommand="ItemsGrid_Update"
AutoGenerateColumns="false"
runat="server">
<HeaderStyle BackColor="#aaaadd"></HeaderStyle>
<Columns>
<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit Command Column">
<ItemStyle Wrap="False"></ItemStyle>
<HeaderStyle Wrap="False"></HeaderStyle>
</asp:EditCommandColumn>
<asp:BoundColumn HeaderText="Item" DataField="Item"
ReadOnly="True" />
<asp:BoundColumn HeaderText="Quantity" DataField="Qty" />
<asp:BoundColumn HeaderText="Price" DataField="Price" />
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
Poznámky
ReadOnly Pomocí vlastnosti určete, zda lze položky v objektu BoundColumn upravovat. Tuto vlastnost lze také použít k programovému určení, jestli je sloupec jen pro čtení.