Задать текст непосредственно в QLineEdit
невозможно, скажем, что после того, как вы используете QTextEdit
или другой виджет и скажете, что хотите реализовать ключ очистки и т. Д., Ваше решение будет во многом зависеть от виджета. [ 116]
Менее связанным решением является использование QCoreApplication::postEvent()
для отправки QKeyEvent
на виджет, который имеет фокус, используя QApplication::focusWidget()
from PyQt4 import QtCore, QtGui
class KeyPad(QtGui.QWidget):
def __init__(self, parent=None):
super(KeyPad, self).__init__(parent)
grid_lay = QtGui.QGridLayout(self)
keys = [
("7", QtCore.Qt.Key_7 , 0, 0, 1, 1),
("8", QtCore.Qt.Key_8 , 0, 1, 1, 1),
("9", QtCore.Qt.Key_9 , 0, 2, 1, 1),
("-", QtCore.Qt.Key_Minus , 0, 3, 1, 1),
("4", QtCore.Qt.Key_4 , 1, 0, 1, 1),
("5", QtCore.Qt.Key_5 , 1, 1, 1, 1),
("6", QtCore.Qt.Key_6 , 1, 2, 1, 1),
("+", QtCore.Qt.Key_Plus , 1, 3, 1, 1),
("1", QtCore.Qt.Key_1 , 2, 0, 1, 1),
("2", QtCore.Qt.Key_2 , 2, 1, 1, 1),
("3", QtCore.Qt.Key_3 , 2, 2, 1, 1),
("0", QtCore.Qt.Key_0 , 3, 0, 1, 2),
(".", QtCore.Qt.Key_Period , 3, 2, 1, 1),
("enter", QtCore.Qt.Key_Return , 2, 3, 2, 1)
]
for text, key, r, c, sr, sc in keys:
button = QtGui.QPushButton(text=text, focusPolicy=QtCore.Qt.NoFocus)
button.setProperty("_key_", key)
grid_lay.addWidget(button, r, c, sr, sc)
button.clicked.connect(self.on_clicked)
if text == "enter":
sp = button.sizePolicy()
sp.setVerticalPolicy(sp.horizontalPolicy())
button.setSizePolicy(sp)
@QtCore.pyqtSlot()
def on_clicked(self):
button = self.sender()
text = "" if button.text() == "enter" else button.text()
key = button.property("_key_")
widget = QtGui.QApplication.focusWidget()
if hasattr(key, 'toPyObject'):
key = key.toPyObject()
if widget:
event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, key, QtCore.Qt.NoModifier, text)
QtCore.QCoreApplication.postEvent(widget, event)
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
cash_btn = QtGui.QPushButton("cash", clicked=self.on_cash_btn_clicked)
card_btn = QtGui.QPushButton("Card")
wallet_btn = QtGui.QPushButton("wallet")
self.cash_widget = QtGui.QWidget(visible=False)
self.cash_received = QtGui.QLineEdit()
self.cash_tender = QtGui.QLineEdit()
cash_lay = QtGui.QVBoxLayout(self.cash_widget)
cash_lay.addWidget(self.cash_received)
cash_lay.addWidget(self.cash_tender)
keypad = KeyPad()
hbox = QtGui.QHBoxLayout()
hbox.addWidget(cash_btn)
hbox.addWidget(card_btn)
hbox.addWidget(wallet_btn)
vlay = QtGui.QVBoxLayout(self)
vlay.addLayout(hbox)
vlay.addWidget(self.cash_widget)
vlay.addWidget(keypad)
@QtCore.pyqtSlot()
def on_cash_btn_clicked(self):
self.cash_widget.setVisible(not self.cash_widget.isVisible())
if self.cash_widget.isVisible():
self.cash_received.setFocus()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
Попробуйте это:
DataSet dsActivity = objCompany.GetActivityDetails();
grdCommunication.DataSource = dsActivity.Tables[0];
grdCommunication.DataBind();
Святой денщик дыма. Имя таблицы было изменено, заставив мой Источник данных быть бесполезным. Но то сообщение об ошибке не имеет никакого смысла в этой ситуации. Таким образом, технически решение tsilb будет работать, если я назову таблицу индексом вместо по имени, таким образом, я отмечу его решение как корректное.
После того, чтобы читать его сообщение я попробовал dsActivity. Таблицы ["Операции"] вместо того, чтобы передать набор данных Источнику данных и имя таблицы в Datamember, и очевидно который не работал, но Если я передаю фактический индекс, который мне не нравится делать, потому что тот индекс мог бы измениться, затем он теперь работает. Но испорченная часть, была та ошибка.. Та ошибка была полностью от основы относительно того, какова проблема была. высказывание, что я определил обоих и удалить один, когда в действительности, который не имел место. и другой действительно испортил вещь, было имя таблицы, был только изменен, чтобы быть всем верхним регистром... Но эй, "Операции" являются другим ключом, чем "ОПЕРАЦИИ".
tslib является правильным, не делайте: grdCommunication. DataSourceID = пустой указатель; или строка. Пустая версия. Вы только используете DataSourceID при использовании управления SqlDataSource или ObjectDataSource для привязки.
Это называют "декларативной" привязкой, потому что Вы используете "объявленные" средства управления от на Вашей странице. Привязка к средствам управления не требует вызова к DataBind () метод.
Поскольку Вы - DataBinding вручную (звонящий grd. DataBind ()) Вы только устанавливаете DataSourrce и затем называете DataBind ().
Я столкнулся с той же ошибкой, но полностью другой проблемой и решением. В моем случае я использую LINQ для SQL для заполнения некоторых выпадающих списков, затем кэшируя результаты для дальнейших просмотров страницы. Все загрузилось бы прекрасный с ясным кэшем, и затем будет ошибка на последующих просмотрах страницы.
if (Cache["countries"] != null)
{
lbCountries.Items.Clear();
lbCountries.DataValueField = "Code";
lbCountries.DataTextField = "Name";
lbCountries.DataSource = (Cache["countries"]);
lbCountries.DataBind();}
else
{
var lstCountries = from Countries in db_read.Countries orderby Countries.Name select Countries;
lbCountries.Items.Clear();
lbCountries.DataValueField = "Code";
lbCountries.DataTextField = "Name";
lbCountries.DataSource = lstCountries.ToList();
lbCountries.DataBind();
Cache.Add("countries", lstCountries, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 240, 0), System.Web.Caching.CacheItemPriority.High, null);
}
Проблема прибыла из: Кэш. Добавьте ("страны", lstCountries, пустой указатель, Система. Сеть. Кэширование. Кэш. NoAbsoluteExpiration, новый TimeSpan (0, 240, 0), Система. Сеть. Кэширование. CacheItemPriority. Высоко, пустой указатель);
Когда это должно было быть: Кэш. Добавьте ("страны", lstCountries. ToList (), пустой указатель, Система. Сеть. Кэширование. Кэш. NoAbsoluteExpiration, новый TimeSpan (0, 240, 0), Система. Сеть. Кэширование. CacheItemPriority. Высоко, пустой указатель);
Я получил эту ошибку сегодня, оказывается, что она не имела никакого отношения к DataSourceID и имела все, чтобы сделать с самим DatasSource.
У меня была проблема в моем DatasSource, и вместо того, чтобы получить связанную с DatasSource ошибку, я получил эту бессмысленную ошибку.
Удостоверьтесь, что Вы - DatasSource, хорошо, и эта ошибка должна уйти.
всегда привязывать набор данных с индексом таблицы к gridview ...
например. gridgrdCommunication.Table [0]; как упоминалось выше Цилбом
, второй способ намеренно записать ..
gridgrdCommunication.DataSourceID = String.Empty; gridgrdCommunication.DataSource = ds; gridgrdCommunication.DataBind ();
Проверьте структуру базы данных .... если вы принимаете свои данные, создайте файл dbml, структура таблицы в вашей базе данных отличается от структуры файла dbml
Если вы используете Object Data Source и хотите условно перезагрузить грид в коде, вы можете успешно сделать это:
Dim datatable As DataTable = dataset.Tables(0)
Dim dataSourceID As String = gvImageFiles.DataSourceID
gvImageFiles.DataSourceID = Nothing
gvImageFiles.DataSource = datatable.DefaultView
gvImageFiles.DataBind()
gvImageFiles.DataSource = Nothing
gvImageFiles.DataSourceID = dataSourceID