我想在ZK框架中的WLISTBOX中選擇行時使特定的單元格可編輯?如何在WLISTBOX ZK中選擇行時設置單元格可編輯?
回答
因爲沒有你想要的答案,所以我決定使用MVVM或MVC。
Here is a working fiddle.
我在這裏貼的最重要的代碼,當鏈路不應該再工作:
<listbox model="@load(vm.items)" selectedItem="@bind(vm.selected)" hflex="true" height="300px">
<listhead>
<listheader label="Name" width="80px"/>
<listheader label="Price" align="center" width="80px" />
<listheader label="Quantity" align="center" width="80px" />
</listhead>
<template name="model" var="item">
<listitem >
<listcell>
<label visible="@load(vm.selected ne item)" value="@load(item.name)" />
<textbox visible="@load(vm.selected eq item)" value="@bind(item.name)" />
</listcell>
<listcell>
<label visible="@load(vm.selected ne item)" value="@load(item.price)" />
<intbox visible="@load(vm.selected eq item)" readonly="true" value="@bind(item.price)" />
</listcell>
<listcell>
<label visible="@load(vm.selected ne item)" value="@load(item.quantity)" />
<intbox visible="@load(vm.selected eq item)" readonly="true" value="@bind(item.quantity)" />
</listcell>
</listitem>
</template>
</listbox>
小解說,如果工作以前ZK 8,你可以用這個。
因此,如果所選項目等於(eq
)或不等於(ne
)到呈現的項目,我們檢查zul。
然後我們改變那個組件的可見性。
如果使用ZK8或更高版本,則可以使用<if test="load(vm.selected eq item)">
。
有了它,它使用陰影元素和條件什麼是不是真正的將不會呈現(不在DOM中),而使用可見它將在DOM中。
使用if
屬性在ZK8早期僅在${}
表達式相結合,MVVM語法將無法正常工作。
因爲它只是靜態的,所以不能用它來實時切換。
所以這就是我們需要使用visible
屬性的原因。
這是一個遲到的迴應,但值得一記錄。
在ZK的ADempiere實現中,WListbox使用WListBoxRenderer渲染行中的行和所有單元格。每列的類都定義並應用於所有行,使行相同。 WListBoxRenderer使用此類來確定要使用哪個組件來顯示字段以及使用哪個組件來編輯該字段。編輯器僅在列初始化時定義爲讀/寫時啓用。您可以使用ColumnInfo結構或通過下面顯示的setColumnClass()和setColumnReadWrite()方法來執行此操作。
/**
* Set the attributes of the column.
*
* @param index The index of the column to be modified
* @param classType The class of data that the column will contain
* @param readOnly Whether the data in the column is read only
* @param header The header text for the column
*
* @see #setColumnClass(int, Class, boolean)
*/
public void setColumnClass (int index, Class classType, boolean readOnly, String header)
{
WListItemRenderer renderer = (WListItemRenderer)getItemRenderer();
setColumnReadOnly(index, readOnly);
renderer.setColumnHeader(index, header);
renderer.setColumnClass(index, classType);
if (index < m_modelHeaderClass.size())
m_modelHeaderClass.set(index, classType);
else
m_modelHeaderClass.add(classType);
return;
}
/**
* Set Column at the specified <code>index</code> to read-only or read/write.
*
* @param index index of column to set as read-only (or not)
* @param readOnly Read only value. If <code>true</code> column is read only,
* if <code>false</code> column is read-write
*/
public void setColumnReadOnly (int index, boolean readOnly)
{
Integer indexObject = new Integer(index);
// Column is ReadWrite
if (m_readWriteColumn.contains(indexObject))
{
// Remove from list
if (readOnly)
{
m_readWriteColumn.remove(indexObject);
} // ReadOnly
}
// current column is R/O - ReadWrite - add to list
else if (!readOnly)
{
m_readWriteColumn.add(indexObject);
}
return;
} // setColumnReadOnly
以下是用於顯示付款分配表單中的發票的示例。 IMiniTable接口由WListBox類實現。請注意,其中三列設置爲readOnly = false,因此這些單元格可在表中進行編輯。
public void setInvoiceColumnClass(IMiniTable invoiceTable, boolean isMultiCurrency)
{
Vector<String> names = getInvoiceColumnNames(isMultiCurrency);
int i = 0;
invoiceTable.setKeyColumnIndex(i);
invoiceTable.setColumnClass(i, IDColumn.class, true, names.get(i++)); // 0-C_Invoice_ID
invoiceTable.setColumnClass(i, Timestamp.class, true, names.get(i++)); // 1-TrxDate
invoiceTable.setColumnClass(i, String.class, true, names.get(i++)); // 2-Value
if (isMultiCurrency)
{
invoiceTable.setColumnClass(i, String.class, true, names.get(i++)); // 3-Currency
invoiceTable.setColumnClass(i, BigDecimal.class, true, names.get(i++)); // 4-Amt
}
invoiceTable.setColumnClass(i, BigDecimal.class, true, names.get(i++)); // 5-ConvAmt
invoiceTable.setColumnClass(i, BigDecimal.class, true, names.get(i++)); // 6-ConvAmt Open
invoiceTable.setColumnClass(i, BigDecimal.class, false, names.get(i++)); // 7-Conv Discount
invoiceTable.setColumnClass(i, BigDecimal.class, false, names.get(i++)); // 8-Conv WriteOff
invoiceTable.setColumnClass(i, BigDecimal.class, false, names.get(i++)); // 9-Conv Applied
invoiceTable.setColumnClass(i, BigDecimal.class, true, names.get(i++)); // 10-Conv OverUnder
// Table UI
invoiceTable.autoSize();
}
謝謝你的詳細解答。我確實發現了,但你的解釋很好。 –
- 1. 如何在選擇JRadioButton時設置不可編輯的JTable單元格?
- 2. TableView,設置可編輯的單元格
- 3. JFace - 在給定行索引處選擇可編輯單元格?
- 4. 如何在編輯該單元格時選擇保持UITableViewCell?
- 5. 在選定行中編輯單元格
- 6. 如何在雙擊時禁用單元格可編輯選項
- 7. 如何在UITableView的編輯模式中選擇單元格?
- 8. 使每個單元格不可編輯時JTable行可選
- 9. 設置單元格值並在內聯編輯中保持可編輯
- 10. 使JTable單元格編輯器值可選,但不可編輯?
- 11. DataGridView - 「單元格選擇樣式」 - 編輯單元格
- 12. 如何在ng-grid中設置複選框單元格編輯模板?
- 13. 可編輯'選擇'元素
- 14. 選擇表格單元格時顯示郵件編輯器
- 15. 如何在離開單元格時提交單元格編輯
- 16. 如何在WPF中選擇單元格時選擇DataGrid單元格內的TextBox?
- 17. UITableView在進入編輯模式時取消選擇單元格
- 18. JavaFx TableView在編輯另一個單元格時設置單元格值
- 19. 如何在編輯時選擇JTable單元格中的所有文本,而不是在輸入時選擇?
- 20. Datagridview:如何在編輯模式下設置單元格?
- 21. 在添加新行時創建不可編輯的單元格可編輯
- 22. 編輯時應選擇kendo網格行
- 23. 如何使JTable的單元格不可編輯但可選
- 24. 如何在jqGrid中編輯單元格?
- 25. 如何在DataGridView中編輯單元格?
- 26. 如何在ag網格單元格編輯器中顯示動態值選擇
- 27. 如何使單元格不可編輯基於gxt中可編輯網格中的另一個單元格值
- 28. Rails - 如何在一年的編輯表單上設置默認選擇表格
- 29. 如何使JTable單元在運行時可編輯或不可編輯?
- 30. UITableView編輯時的單元格選擇模式
Mvvm或mvc模式? – chillworld
btw,'wlistbox'不是zk的一個組件。 ZK有'listbox'。這是由貴公司創建的組件嗎? – chillworld
@chillworld由adempiere項目創建。和列表框一樣。 –