“И DataSource и DataSourceID определяются” ошибка с помощью ASP.NET GridView

Задать текст непосредственно в 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_())
9
задан stephenbayer 6 November 2008 в 18:34
поделиться

8 ответов

Попробуйте это:

DataSet dsActivity = objCompany.GetActivityDetails();
grdCommunication.DataSource = dsActivity.Tables[0];
grdCommunication.DataBind();
9
ответ дан 4 December 2019 в 12:22
поделиться

Святой денщик дыма. Имя таблицы было изменено, заставив мой Источник данных быть бесполезным. Но то сообщение об ошибке не имеет никакого смысла в этой ситуации. Таким образом, технически решение tsilb будет работать, если я назову таблицу индексом вместо по имени, таким образом, я отмечу его решение как корректное.

После того, чтобы читать его сообщение я попробовал dsActivity. Таблицы ["Операции"] вместо того, чтобы передать набор данных Источнику данных и имя таблицы в Datamember, и очевидно который не работал, но Если я передаю фактический индекс, который мне не нравится делать, потому что тот индекс мог бы измениться, затем он теперь работает. Но испорченная часть, была та ошибка.. Та ошибка была полностью от основы относительно того, какова проблема была. высказывание, что я определил обоих и удалить один, когда в действительности, который не имел место. и другой действительно испортил вещь, было имя таблицы, был только изменен, чтобы быть всем верхним регистром... Но эй, "Операции" являются другим ключом, чем "ОПЕРАЦИИ".

4
ответ дан 4 December 2019 в 12:22
поделиться

tslib является правильным, не делайте: grdCommunication. DataSourceID = пустой указатель; или строка. Пустая версия. Вы только используете DataSourceID при использовании управления SqlDataSource или ObjectDataSource для привязки.

Это называют "декларативной" привязкой, потому что Вы используете "объявленные" средства управления от на Вашей странице. Привязка к средствам управления не требует вызова к DataBind () метод.

Поскольку Вы - DataBinding вручную (звонящий grd. DataBind ()) Вы только устанавливаете DataSourrce и затем называете DataBind ().

1
ответ дан 4 December 2019 в 12:22
поделиться

Я столкнулся с той же ошибкой, но полностью другой проблемой и решением. В моем случае я использую 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. Высоко, пустой указатель);

0
ответ дан 4 December 2019 в 12:22
поделиться

Я получил эту ошибку сегодня, оказывается, что она не имела никакого отношения к DataSourceID и имела все, чтобы сделать с самим DatasSource.

У меня была проблема в моем DatasSource, и вместо того, чтобы получить связанную с DatasSource ошибку, я получил эту бессмысленную ошибку.

Удостоверьтесь, что Вы - DatasSource, хорошо, и эта ошибка должна уйти.

0
ответ дан 4 December 2019 в 12:22
поделиться

всегда привязывать набор данных с индексом таблицы к gridview ...

например. gridgrdCommunication.Table [0]; как упоминалось выше Цилбом

, второй способ намеренно записать ..

gridgrdCommunication.DataSourceID = String.Empty; gridgrdCommunication.DataSource = ds; gridgrdCommunication.DataBind ();

0
ответ дан 4 December 2019 в 12:22
поделиться

Проверьте структуру базы данных .... если вы принимаете свои данные, создайте файл dbml, структура таблицы в вашей базе данных отличается от структуры файла dbml

0
ответ дан 4 December 2019 в 12:22
поделиться

Если вы используете 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
0
ответ дан 4 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: